是否可以放置覆盖导航栏的视图(对象)?我根本放不下。它总是隐藏在导航下。酒吧。
3 回答
我不建议尝试覆盖您的导航栏,因为它的存在是有原因的。但是,要完全隐藏它,您可以向导航控制器发送该setNavigationBarHidden:animated:
方法。
您可以在其中一个 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];
}
如果您UIViewController
在 a 下,UITabBarController
则在调用[self navigationController]
after 之前不会设置viewDidLoad
它,因为在选择相应的选项卡之前不会确定其布局。到那时[self navigationController]
,iOS 可能已经更改了状态,以便导航栏再次可见。
对于影响视图布局的更改,最好在UIViewController
方法中执行这些操作viewDidLayoutSubviews
。UIViewController
如果有一个,将始终设置执行中的哪个点,[self navigationController]
并且 iOS 不会进一步更改其状态。
viewDidLoad
理想情况下,应该只用于实例化视图的内容,而不是在布局中定位它们。由于更改导航栏的可见性会影响视图的布局,因此在其中设置其可见性viewDidLoad
可能会导致未定义的行为。
- (void) viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
[[self navigationController]
setNavigationBarHidden:YES
animated:NO];
}