UIScreen主屏幕边界给出错误的大小

时间:2016-08-04 17:08:52

标签: ios frame

您好我以编程方式启动了一个rootViewController(门户网站只有没有格局)

这是代码使用

[]

但它没有给出正确的尺寸。 (在屏幕下方缩小)

只有此代码才能正确

CGRect appFrame = [[UIScreen mainScreen] bounds];

但是这段代码会给出折旧警告(applicationFrame折旧)

(我的模拟器是IOS 9.3)

如何解决问题?任何帮助都非常感谢!谢谢!

这是使用 CGRect appFrame = [UIScreen mainScreen].applicationFrame

时的屏幕截图

enter image description here

这里是[UIscreen mainscreen] .applicationFrame

enter image description here

3 个答案:

答案 0 :(得分:3)

[[UIScreen mainScreen] bounds]给出整个窗口的正确大小,但它包含状态栏的大小。如果您想要状态栏的大小(可以减去其高度),则应使用[[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框架,以满足您的需求。

答案 1 :(得分:2)

您可以执行以下操作。

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,我希望这可以解决您的问题。

答案 2 :(得分:-1)

确保您已在自己的应用程序中添加了所有分辨率的启动图像 Images.xcassets `

  

请查看我附上的屏幕截图

`enter image description here

  

CGRect appFrame = [[UIScreen mainScreen] bounds]; //这是   获取屏幕尺寸的正确方法