【问题标题】:Navigationbar not repositioning after adding statusbar添加状态栏后导航栏未重新定位
【发布时间】:2013-01-24 06:36:56
【问题描述】:

我的导航栏定位问题似乎在 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 获得正确的位置?

【问题讨论】:

    标签: ios ios6 uinavigationbar statusbar


    【解决方案1】:

    改为在 viewWillAppear 上调用 setStatusBarHidden:NO。

    【讨论】:

    • 试过了。对所有视图[Will|Did][Appear|Load] 方法的效果相同。
    • 很奇怪,我遇到了完全相同的问题,并且 [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide] 有效,但仅来自 viewWillAppear
    • 你知道的;这是我又傻/累了。由于setStatusBarHidden:NO 仍在wiewDidLoad 方法中,因此后续调用的行为确实有所不同。我唯一可以工作的地方是viewDidAppear,并且只有两个调用(因为在任何调用中添加 statusBar 时视图的框架都没有调整,并且只有在最后一个被触发时才响应(@ 987654324@).
    • 啊哈,这解释了它,很好,你让它工作了! :) 现在我更感兴趣的是为什么我的解决方案只适用于 viewWillAppear..
    • 这也让我很头疼。问题(和其他许多问题一样)首先出现在 iOS6 中。
    【解决方案2】:

    看来我又在工作了:

    其他方法(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);
    }
    

    【讨论】:

      猜你喜欢
      • 2013-07-23
      • 2013-02-04
      • 2023-04-09
      • 1970-01-01
      • 2014-05-26
      • 2018-03-03
      • 2016-04-08
      • 2014-03-29
      • 1970-01-01
      相关资源
      最近更新 更多