如何隐藏UINavigationBar

时间:2012-10-20 20:22:42

标签: objective-c cocoa-touch view uinavigationbar

是否可以放置将覆盖导航栏的视图(对象)?我根本无法把它放在那里。它总是隐藏在导航之下。杆

3 个答案:

答案 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];
}