UIScreen mainScreen 边界给出错误的大小
UIScreen mainScreen bounds give wrong size
您好,我正在以编程方式启动 rootViewController(只有门户,没有景观]
这是代码使用
CGRect appFrame = [[UIScreen mainScreen] bounds];
但它没有给出正确的尺寸。 (在屏幕底部截断)
只有这段代码给出正确的
CGRect appFrame = [UIScreen mainScreen].applicationFrame
但是这段代码会给出折旧的警告(applicationFrame is depreciated)
(我的模拟器是IOS9.3)
如何解决这个问题?非常感谢任何帮助!谢谢!
这里是使用[UIscreen mainscreen].bounds
时的截图
这里是[UIscreen mainscreen].applicationFrame
[[UIScreen mainScreen] bounds]
给出了整个 window 的正确大小,但它包括状态栏的大小。如果你想要状态栏的大小(你可以减去它的高度),你应该使用 [[UIApplication sharedApplication] statusBarFrame]
来获取状态栏的框架。导航栏和标签栏的高度通常为 44。因此,如果您的视图需要矩形,请使用 CGRectMake()
:
CGRect frame_screen = [[UIScreen mainScreen] bounds];
CGRect frame_view = CGRectMake(0,0,frame_screen.size.width,frame_screen.size.height - [[UIApplication sharedApplication] statusBarFrame].size.height);
注意CGRectMake
的最后一个参数是高度,对于标签栏或导航栏通常可以负44。
编辑:尝试记录 [UIScreen mainScreen].applicationFrame
和 [[UIScreen mainScreen] bounds]
到控制台,看看它们之间有什么区别。像
CGRect frame_screen = [[UIScreen mainScreen] bounds];
NSLog(@"x: %f, y: %f, width: %f, height: %f",frame_screen.origin.x,frame_screen.origin.y,frame_screen.size.width,frame_screen.size.height);
CGRect frame_application = [UIScreen mainScreen].applicationFrame
NSLog(@"x: %f, y: %f, width: %f, height: %f",frame_application.origin.x,frame_application.origin.y,frame_application.size.width,frame_application.size.height);
然后使用该信息[[UIScreen mainScreen] bounds
构建您需要的框架。
确保您已在您的应用程序中添加所有分辨率的启动图像Images.xcassets
`
Please take a look on Screen shot i attached
`
CGRect appFrame = [[UIScreen mainScreen] bounds]; //This is the
correct way to get your screen size
您可以执行以下操作。
CGRect rect = [UIScreen mainScreen].bounds;
CGRect screenFrame = CGRectMake(0, [[UIApplication sharedApplication] statusBarFrame].size.height, rect.size.width, rect.size.height - [[UIApplication sharedApplication] statusBarFrame].size.height);
现在你可以使用这个screenFrame了,希望这能解决你的问题。
您好,我正在以编程方式启动 rootViewController(只有门户,没有景观]
这是代码使用
CGRect appFrame = [[UIScreen mainScreen] bounds];
但它没有给出正确的尺寸。 (在屏幕底部截断)
只有这段代码给出正确的
CGRect appFrame = [UIScreen mainScreen].applicationFrame
但是这段代码会给出折旧的警告(applicationFrame is depreciated)
(我的模拟器是IOS9.3)
如何解决这个问题?非常感谢任何帮助!谢谢!
这里是使用[UIscreen mainscreen].bounds
这里是[UIscreen mainscreen].applicationFrame
[[UIScreen mainScreen] bounds]
给出了整个 window 的正确大小,但它包括状态栏的大小。如果你想要状态栏的大小(你可以减去它的高度),你应该使用 [[UIApplication sharedApplication] statusBarFrame]
来获取状态栏的框架。导航栏和标签栏的高度通常为 44。因此,如果您的视图需要矩形,请使用 CGRectMake()
:
CGRect frame_screen = [[UIScreen mainScreen] bounds];
CGRect frame_view = CGRectMake(0,0,frame_screen.size.width,frame_screen.size.height - [[UIApplication sharedApplication] statusBarFrame].size.height);
注意CGRectMake
的最后一个参数是高度,对于标签栏或导航栏通常可以负44。
编辑:尝试记录 [UIScreen mainScreen].applicationFrame
和 [[UIScreen mainScreen] bounds]
到控制台,看看它们之间有什么区别。像
CGRect frame_screen = [[UIScreen mainScreen] bounds];
NSLog(@"x: %f, y: %f, width: %f, height: %f",frame_screen.origin.x,frame_screen.origin.y,frame_screen.size.width,frame_screen.size.height);
CGRect frame_application = [UIScreen mainScreen].applicationFrame
NSLog(@"x: %f, y: %f, width: %f, height: %f",frame_application.origin.x,frame_application.origin.y,frame_application.size.width,frame_application.size.height);
然后使用该信息[[UIScreen mainScreen] bounds
构建您需要的框架。
确保您已在您的应用程序中添加所有分辨率的启动图像Images.xcassets `
Please take a look on Screen shot i attached
`
CGRect appFrame = [[UIScreen mainScreen] bounds]; //This is the correct way to get your screen size
您可以执行以下操作。
CGRect rect = [UIScreen mainScreen].bounds;
CGRect screenFrame = CGRectMake(0, [[UIApplication sharedApplication] statusBarFrame].size.height, rect.size.width, rect.size.height - [[UIApplication sharedApplication] statusBarFrame].size.height);
现在你可以使用这个screenFrame了,希望这能解决你的问题。