2013-02-08 77 views
2

我有一个似乎与iOS6一起出现的导航栏定位问题。
它的作用在类似proplem旋转的一些看法导航栏在添加状态栏后不重新定位

的应用程序有一个闪屏时,一些用户遇到许多方面,全屏显示(实现通过设置Hide statusbar during application launchTrue)在

然后在viewDidLoad我主视图控制器下面一行添加了状态栏返回到应用程序:

[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone]; 

这增加了状态栏的应用程序,如预期向下移动视图20pt。 但是,NavigationBar保持放置在StatusBar下方,下方有20pt毛刺。

The glitch created by adding statusBar

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获得正确的位置?

回答

1

好像我再次在工作asleap:

在做其他方法(view[Will|Did]Appear)的事情,因为状态栏已经由调用从viewDidLoad显示不适用的效果。我从那里删除了代码,然后从viewDidAppear获得了期望的效果。之前调用的任何方法都不会改变子框架。 (viewDidLoadviewWillAppear改变了[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); 
} 
1

调用setStatusBarHidden:取而代之的是viewWillAppear。

+0

试过了。 Samme对所有视图都有影响[Will | Did] [Appear | Load]方法。 – mariusnn 2013-02-08 13:45:33

+0

奇怪,我有完全相同的问题和[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide]工作,但只能从viewWillAppear – elk 2013-02-08 13:56:27

+0

你知道;这是我再次愚蠢/疲惫。由于'setStatusBarHidden:NO'仍然处于'wiewDidLoad'方法中,所以后续调用的行为不同。我得到的东西的唯一的地方是'viewDidAppear',并且只有两个调用(因为在任何调用中添加statusBar时视图的框架都没有调整,并且只有最后一个调用响应才被触发(' viewDidAppear')。 – mariusnn 2013-02-08 14:01:27