如何防止顶栏妨碍视图

时间:2014-03-21 10:33:57

标签: ios ipad layout

我正在编写我的第一个iOS应用程序,并注意到顶部栏出现在我的应用程序上:

enter image description here

我的主窗口是这样创建的:

_window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

我注意到this similar question,但我没有导航控制器。我的根控制器是一个标签控制器。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您应该使用applicationFrame代替boundsbounds会返回包含状态栏的大小,而applicationFrame会返回您的应用内容框架。

_window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];

在iOS7状态栏中可以是半透明的。这意味着applicationFramebounds将返回相同的框架,因为内容可以在状态栏下方绘制。要解决此问题,您可以偏移窗口波纹管状态栏(20px

_window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
_window.clipsToBounds = YES;
_window.frame =  CGRectMake(0, 20, _window.frame.size.width, _window.frame.size.height - 20);
_window.bounds = CGRectMake(0, 20, _window.frame.size.width, _window.frame.size.height);

要使其适用于所有版本,请添加系统版本条件,如下所示:

_window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
    _window.clipsToBounds = YES;
    _window.frame =  CGRectMake(0, 20, _window.frame.size.width, _window.frame.size.height - 20);
    _window.bounds = CGRectMake(0, 20, _window.frame.size.width, _window.frame.size.height);
}

最好避免修改窗口框架,使用applicationFrame并使用半透明状态栏从iOS7顶部偏移20px的内容视图。