如何在iOS程序中以编程方式设置UIView全屏以适用于所有设备?

6

我需要以编程方式为所有设备设置一个全屏的UIView,如:iPhone 3GS,4,4S,5,5S和5C。

我已经搜索了很多次,得到了答案,但是底部少了20像素。请看我的截图并告诉我该怎么做。

enter image description here

我的代码是:

      UIView  *myview = [[UIView alloc] initWithFrame:CGRectMake(0, 0,   [[UIScreen mainScreen] applicationFrame].size.width, [[UIScreen mainScreen] applicationFrame].size.height)];
      [myview setBackgroundColor:[UIColor grayColor]];
      [self.view addSubview: myview];

从底部看,它的20像素是白色。我该怎么处理?

1
ApplicationFrame 是屏幕大小减去状态栏的大小(如果可见),bounds 则是屏幕大小,不考虑状态栏。 - Jonathan F.
你正在使用自动布局吗? - Santosh Sharma
那么你必须使用自动布局或在视图高度上添加+20,因为你的状态栏重叠在视图上。 - Santosh Sharma
我正在通过编码创建,而不是使用XIB或Storyboard。 - user3631436
2个回答

9
试试这个:
 UIView  *myview = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [[UIScreen mainScreen] bounds].size.width, [[UIScreen mainScreen] bounds].size.height)];
 [myview setBackgroundColor:[UIColor grayColor]];
 [self.view addSubview:myview];

我会为你解释清楚,我相信你能理解。

[[UIScreen mainScreen] bounds][[UIScreen mainScreen] applicationFrame] 之间有一点小区别。

当你使用 UIScreen 的 Bounds 属性时,你会得到整个设备屏幕的信息(包括状态栏)。两次调用之间没有任何关系,除了 applicationFrame 是在 UIScreen Bounds 坐标系统下返回的。


这将使新视图在大小方面全屏显示,但它将相对于 self.view 的左上角定位,该位置可能不是屏幕的左上角 - Nicolas Miari
有人能展示一下这个的Swift等效版本吗? - Arjun

1
UIView  *myview = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];
[myview setBackgroundColor:[UIColor grayColor]];
[self.window addSubview: myview];

 NSLog(@"FRAME: %@",NSStringFromCGRect(myview.bounds));

2014年9月11日12:17:37.451 Test[21793:60b] 帧:{{0, 0}, {320, 480}}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接