2

我有一个导航栏定位问题,似乎在 iOS6 中出现。
它在许多方面的行为类似于一些用户在旋转某些视图时遇到的问题

该应用程序有一个启动画面,全屏显示(通过设置Hide statusbar during application launchTrue

然后在viewDidLoad我的主视图控制器中,以下行将状态栏添加回应用程序:

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

这会将 StatusBar 添加到应用程序中,并按预期将视图向下移动 20pt。但是,NavigationBar 保持在 StatusBar 下方,下方有 20pt 的故障。

添加statusBar造成的故障

在 iOS6 之前,我曾经通过添加以下代码行来解决此问题:

[UIApplication sharedApplication].keyWindow.frame=CGRectMake(0, 20, 320, [[UIScreen mainScreen] bounds].size.height-20);

但是,现在这不起作用。

一些研究表明,在调用 时viewDidLoadkeyWindow.frame大小和原点都是 {0,0},更改它没有效果。

将上面提到的两行插入到viewDidAppear应用程序启动时,我得到了相同的行为。然而,当我移动到另一个视图并返回到第一个视图时,更改keyWindow.frame具有所需的效果,并且 NavigationBar 最终定位在它应该在的位置。

然后我的问题是:当 StatusBar 最初隐藏时,如何在将 StatusBar 添加到 iOS 应用程序后使 NavigationBar 获得正确的位置?

4

2 回答 2

1

改为在 viewWillAppear 上调用 setStatusBarHidden:NO。

于 2013-02-08T13:41:26.553 回答
1

好像我又在工作中睡着了:

其他方法 ( view[Will|Did]Appear) 中的处理效果不适用,因为调用 from 已经显示了状态栏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);
}
于 2013-02-08T14:01:32.193 回答