我正在编写我的第一个iOS应用程序,并注意到顶部栏出现在我的应用程序上:
我的主窗口是这样创建的:
_window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
我注意到this similar question,但我没有导航控制器。我的根控制器是一个标签控制器。
我该如何解决这个问题?
答案 0 :(得分:0)
您应该使用applicationFrame
代替bounds
。 bounds
会返回包含状态栏的大小,而applicationFrame
会返回您的应用内容框架。
_window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
在iOS7状态栏中可以是半透明的。这意味着applicationFrame
和bounds
将返回相同的框架,因为内容可以在状态栏下方绘制。要解决此问题,您可以偏移窗口波纹管状态栏(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
的内容视图。