如何隐藏 UINavigationBar
Posted
技术标签:
【中文标题】如何隐藏 UINavigationBar【英文标题】:How to Hide UINavigationBar 【发布时间】:2012-10-20 20:22:41 【问题描述】:是否可以放置覆盖导航栏的视图(对象)?我根本放不下。它总是隐藏在导航下。吧。
【问题讨论】:
这与 Xcode 无关。已编辑。 【参考方案1】:我不建议尝试覆盖您的导航栏,因为它的存在是有原因的。但是,要完全隐藏它,您可以向导航控制器发送 setNavigationBarHidden:animated:
方法。
【讨论】:
【参考方案2】:您可以在其中一个 viewController 的 viewDidLoad 中执行以下操作:
- (void)viewDidLoad
[super viewDidLoad];
UIView* navigationBarCover = [[UIView alloc] initWithFrame:self.navigationController.navigationBar.frame];
navigationBarCover.backgroundColor = [UIColor blackColor];
[self.navigationController.view addSubview:navigationBarCover];
你也可以隐藏navigationBar,把视图放到viewControllers视图上:
- (void)viewDidLoad
[super viewDidLoad];
[self.navigationController setNavigationBarHidden:YES animated:NO];
UIView* navigationBarCover = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
navigationBarCover.backgroundColor = [UIColor redColor];
[self.view addSubview:navigationBarCover];
【讨论】:
这回答了 OP,但请不要这样做。非常糟糕的事情TM。【参考方案3】:如果您的UIViewController
在UITabBarController
下,则在调用viewDidLoad
之前不会设置[self navigationController]
,因为在选择其相应的选项卡之前不会确定其布局。到那时,[self navigationController]
的状态可能已经被 ios 更改了,因此导航栏再次可见。
对于影响视图布局的更改,最好在UIViewController
方法viewDidLayoutSubviews
中执行这些操作。在UIViewController
执行中的哪一点,[self navigationController]
将始终设置(如果有),并且 iOS 不会进一步更改其状态。
viewDidLoad
理想情况下应该只用于实例化视图的内容,而不是在布局中定位它们。由于更改导航栏的可见性会影响视图的布局,因此在 viewDidLoad
内设置其可见性可能会导致未定义的行为。
- (void) viewDidLayoutSubviews
[super viewDidLayoutSubviews];
[[self navigationController]
setNavigationBarHidden:YES
animated:NO];
【讨论】:
以上是关于如何隐藏 UINavigationBar的主要内容,如果未能解决你的问题,请参考以下文章