我有一个似乎在iOS6中出现的导航栏定位问题 它在许多方面起作用,类似于一些用户在旋转某些视图时遇到的问题
该应用有一个闪屏,全屏显示(通过将Hide statusbar during application launch
设置为True
来实现)
然后在我的主视图控制器的viewDidLoad
中,以下行将状态栏添加回应用程序:
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
这会将StatusBar添加到应用程序,并按预期将视图向下移动20pt。 但是,NavigationBar保持在StatusBar下方,下面有20pt的毛刺。
在iOS6之前我曾经通过添加以下代码来解决这个问题:
[UIApplication sharedApplication].keyWindow.frame=CGRectMake(0, 20, 320, [[UIScreen mainScreen] bounds].size.height-20);
然而,现在,这不起作用。
一些研究显示,在致电viewDidLoad
时,keyWindow.frame
的大小和来源均为{0,0},并且更改它无效。
将上述两行插入viewDidAppear
时,我会在应用启动时获得相同的行为。然而,当我移动到另一个视图并返回到第一个视图时,keyWindow.frame
的更改具有所需的效果,并且NavigationBar最终定位在它应该的位置。
我的问题是:当StatusBar最初被隐藏时,如何在将StatusBar添加到iOS应用程序后使NavigationBar获得正确的位置?
答案 0 :(得分:1)
调用setStatusBarHidden:在viewWillAppear上为NO。
答案 1 :(得分:1)
好像我再次上班了
在其他方法(view[Will|Did]Appear
)中执行操作的效果不适用,因为状态栏已由viewDidLoad
的调用显示。我确实从那里删除了代码,然后从viewDidAppear
获得了所需的效果。前面调用的任何方法都不会改变子框架。 (viewDidLoad
或viewWillAppear
都不会改变[UIApplication sharedApplication].keyWindow.frame
)的框架
所以这必须在viewDidAppear
中完成。只需确保状态栏尚未显示在之前调用的某些方法中......
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:NO];
[UIApplication sharedApplication].keyWindow.frame=CGRectMake(0, 20, 320, [[UIScreen mainScreen] bounds].size.height-20);
}