【发布时间】:2012-10-20 20:22:41
【问题描述】:
是否可以放置覆盖导航栏的视图(对象)?我根本放不下。它总是隐藏在导航下。吧。
【问题讨论】:
-
这与 Xcode 无关。已编辑。
标签: objective-c cocoa-touch view uinavigationbar
是否可以放置覆盖导航栏的视图(对象)?我根本放不下。它总是隐藏在导航下。吧。
【问题讨论】:
标签: objective-c cocoa-touch view uinavigationbar
我不建议尝试覆盖您的导航栏,因为它的存在是有原因的。但是,要完全隐藏它,您可以向导航控制器发送 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 在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];
}
【讨论】: