是否可以放置将覆盖导航栏的视图(对象)?我根本无法把它放在那里。它总是隐藏在导航之下。杆
答案 0 :(得分:10)
我不建议尝试覆盖您的导航栏,因为它是有原因的。但是,要完全隐藏它,您可以向导航控制器发送setNavigationBarHidden:animated:
方法。
答案 1 :(得分:3)
您可以在其中一个viewControllers的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];
}
答案 2 :(得分:0)
如果UIViewController
位于UITabBarController
之下,则在调用[self navigationController]
之后才会设置viewDidLoad
,因为在选择相应的标签之前未确定其布局。到目前为止,[self navigationController]
的状态可能已被iOS更改,以便再次显示导航栏。
对于影响视图布局的更改,最好在UIViewController
方法viewDidLayoutSubviews
中执行这些更改。如果存在,UIViewController
执行[self navigationController]
中的哪一点将始终被设置,并且其状态将不会被iOS进一步更改。
viewDidLoad
应仅用于实例化视图的内容,并且永远不要将它们放置在布局中。由于更改导航栏的可见性会影响视图的布局,因此在viewDidLoad
内设置其可见性可能会导致未定义的行为。
- (void) viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
[[self navigationController]
setNavigationBarHidden:YES
animated:NO];
}