1

是否可以放置覆盖导航栏的视图(对象)?我根本放不下。它总是隐藏在导航下。酒吧。

4

3 回答 3

10

我不建议尝试覆盖您的导航栏,因为它的存在是有原因的。但是,要完全隐藏它,您可以向导航控制器发送该setNavigationBarHidden:animated:方法。

于 2012-10-20T20:37:11.460 回答
3

您可以在其中一个 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];
}
于 2012-10-20T20:45:33.533 回答
0

如果您UIViewController在 a 下,UITabBarController则在调用[self navigationController]after 之前不会设置viewDidLoad它,因为在选择相应的选项卡之前不会确定其布局。到那时[self navigationController],iOS 可能已经更改了状态,以便导航栏再次可见。

对于影响视图布局的更改,最好在UIViewController方法中执行这些操作viewDidLayoutSubviewsUIViewController如果有一个,将始终设置执行中的哪个点,[self navigationController]并且 iOS 不会进一步更改其状态。

viewDidLoad理想情况下,应该只用于实例化视图的内容,而不是在布局中定位它们。由于更改导航栏的可见性会影响视图的布局,因此在其中设置其可见性viewDidLoad可能会导致未定义的行为。

- (void) viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];
    [[self navigationController]
        setNavigationBarHidden:YES
        animated:NO];
}
于 2015-07-06T15:25:11.170 回答