隐藏然后重新显示UINavigationBar会导致问题

时间:2012-08-21 02:37:22

标签: objective-c ios cocoa-touch uinavigationcontroller

我正在隐藏viewDidLoad

中的状态栏和导航栏
- (void)viewDidLoad {
    [super viewDidLoad];

    [self.navigationController setNavigationBarHidden:YES animated:YES];
    [[UIApplication sharedApplication] setStatusBarHidden:YES];
}

一切正常。但是,当我关闭视图控制器时,在viewWillDisappear中:我这样做:

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    [self.navigationController setNavigationBarHidden:NO animated:YES];
    [[UIApplication sharedApplication] setStatusBarHidden:NO];
}

这导致我的所有观点都被严重定位: enter image description here

我做错了什么? 感谢

2 个答案:

答案 0 :(得分:1)

我没有尝试过,所以我只是在猜测。 您的导航栏的框架设置就像没有Status bar一样。有些事情是按照错误的顺序完成的 所以在你的代码中我看到当没有状态栏时,要求导航栏可见。

[self.navigationController setNavigationBarHidden:NO animated:YES];    
[[UIApplication sharedApplication] setStatusBarHidden:NO];

您是否尝试过反转这两行? (我只是在猜测)

我的另一个测试是在viewDidAppear中设置导航栏 那时applicationFrame应该已经更新到状态栏再次可见的事实。


我测试了它,并且反转调用使其工作。但是你不会得到导航栏和状态栏的动画。如果您需要,我建议您将这些来电置于viewWillAppearviewDidAppear

答案 1 :(得分:0)

我认为,当显示导航栏时,应用程序状态栏仍然隐藏,因此导航栏offsetY为0.您应该更改两种调用方法的顺序。

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    [[UIApplication sharedApplication] setStatusBarHidden:NO];
    [self.navigationController setNavigationBarHidden:NO animated:YES];
}