隐藏然后重新显示 UINavigationBar 会导致问题
Posted
技术标签:
【中文标题】隐藏然后重新显示 UINavigationBar 会导致问题【英文标题】:Hiding and then re-displaying UINavigationBar causes problems 【发布时间】:2012-08-21 02:37:22 【问题描述】:我在 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];
这会导致我的所有视图定位错误:
我做错了什么? 谢谢
【问题讨论】:
【参考方案1】:我没有尝试过,所以我只是猜测。
您的导航栏设置了一个框架,就好像没有Status bar
。某事以错误的顺序完成。
因此,在您的代码中,我看到当导航栏被要求在没有状态栏的情况下可见时。
[self.navigationController setNavigationBarHidden:NO animated:YES];
[[UIApplication sharedApplication] setStatusBarHidden:NO];
您是否尝试过反转这两条线? (我只是猜测)
我的另一个测试是设置导航栏在 viewDidAppear 中可见。 那时 applicationFrame 应该已经更新为状态栏再次可见的事实。
我已经对其进行了测试,并且反转调用使其工作。但是你不会得到导航栏和状态栏的动画。如果您需要,我建议您将这些电话拨打至viewWillAppear
或viewDidAppear
【讨论】:
【参考方案2】:我认为,当显示导航栏时,应用程序状态栏仍然隐藏,因此导航栏 offsetY 为 0。您应该更改两种调用方法的顺序。
- (void)viewWillDisappear:(BOOL)animated
[super viewWillDisappear:animated];
[[UIApplication sharedApplication] setStatusBarHidden:NO];
[self.navigationController setNavigationBarHidden:NO animated:YES];
【讨论】:
以上是关于隐藏然后重新显示 UINavigationBar 会导致问题的主要内容,如果未能解决你的问题,请参考以下文章
Uiwebview 用 Swift 隐藏/显示 UInavigationbar
UINavigationBar 在滚动/滑动隐藏后将不再显示