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了,希望这能解决你的问题。