【问题标题】:NavigationBar doesn't disappear after Show Detail segue在 Show Detail segue 之后 NavigationBar 不会消失
【发布时间】:2017-10-22 21:22:35
【问题描述】:
现在我有一个 viewController(A),它是 Navagation Controller 的根视图控制器,然后是 Tab Bar Controller,我想从它执行 segue 到另一个 viewController(B),完全取代A。
因此我应用了 show detail(replace),它在其他情况下效果很好。但是在这种情况下,当 A 连接到 B 时,导航栏和标签栏仍然存在。为什么会发生这种情况以及如何解决?
【问题讨论】:
标签:
ios
swift
uinavigationcontroller
uitabbarcontroller
segue
【解决方案1】:
在 viewController(A) 中你必须写
override func viewWillAppear(_ animated: Bool) {
self.tabBarController?.tabBar.isHidden = false
self.navigationController?.navigationBar.isHidden = false
}
在 viewController(B) 中你必须写
override func viewWillAppear(_ animated: Bool) {
self.tabBarController?.tabBar.isHidden = true
self.navigationController?.navigationBar.isHidden = true
}
【解决方案2】:
导航控制器管理视图控制器堆栈,为分层内容提供向下钻取界面。所以这不是问题,应该是这样。参考https://developer.apple.com/reference/uikit/uinavigationcontroller,
要为整个应用隐藏它,您可以按照以下方式进行操作
在application:(UIApplication *)application didFinishLaunchingWithOptions: 方法中只需添加[[UINavigationBar appearance]setHidden:YES]; 它将隐藏整个应用程序的导航栏。
并隐藏TabBarController 的底部栏
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"To viewController(B)"]) {
viewControllerB *destViewController = segue.destinationViewController;
// Hide bottom tab bar in the detail view
destViewController.hidesBottomBarWhenPushed = YES;
}
}