嗨其他开发者,
我很惊讶我没有找到关于iOS 8特定用例的任何信息。让我解释一下,我有一个导航控制器堆栈,当用户点击一个单元格时,第一个视图隐藏了navigationBar推送新视图,我需要此视图上显示的导航栏返回(显然)。在iOS 7上,只需在viewWillAppear中添加此行:
[self.navigationController setNavigationBarHidden:NO animated:YES];
它就像一个魅力。但是从iOS 8开始,我很难有同样的行为。现在我设法通过使用:
来做同样的事情- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0"))
[self.navigationController setNavigationBarHidden:NO animated:NO];
}
- (void)viewDidLoad {
[super viewDidLoad];
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")) {
self.automaticallyAdjustsScrollViewInsets = NO;
self.edgesForExtendedLayout = UIRectEdgeNone;
self.collectionView.contentInset = UIEdgeInsetsMake(self.navigationController.navigationBar.frame.size.height, 0, 0, 0);
} }
更改我的collectionsView / tableviews的contentInset,无论我需要显示什么。它会起作用,但它在 * 中真的很痛苦(如果用户来自新的viewcontroller,有时内容插入不是必需的。)
对于上下文,项目最初是为处理iOS 6和7而开发的,所以没有故事板,所有都是以编程方式完成的。我将应用程序移植到更现代的代码库中并使其具有通用性。
我错过了什么吗?在iOS 7/8中有更好的方法来处理它吗?
答案 0 :(得分:13)
您希望在viewWillAppear
中隐藏它并在viewWillDisappear
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
navigationController?.navigationBar.isHidden = true
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
navigationController?.navigationBar.isHidden = false
}
答案 1 :(得分:9)
我以为行是:
self.navigationController.navigationBar.hidden = YES;
我检查它,它对我来说很好。 。 。 试试吧 。 。
答案 2 :(得分:9)
动画这样做是为了顺利过渡:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:YES animated:YES];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[self.navigationController setNavigationBarHidden:NO animated:YES];
}
答案 3 :(得分:7)
在iOS 8
上,似乎navigationBarHidden
与navigationBar.hidden
不同。
(我正在构建部署目标iOS 6
- 不确定这是否有所不同。)
在我的代码中,使用以下连续行查看调试器:
bool b1 = self.navigationController.navigationBarHidden; // FALSE
bool b2 = self.navigationController.navigationBar.hidden; // TRUE
b1
显示为false,b2
显示为true。
设置self.navigationController.navigationBar.hidden = false
解决问题
答案 4 :(得分:4)
我有同样的问题,我真的尝试了一切,但导航栏没有出现。最后我意识到我在第一个视图控制器中有这个代码: - )
[self.navigationController setNavigationBarHidden:YES];
我想,其他人检查这个问题,我犯了错误,所以我觉得值得一提。
答案 5 :(得分:0)
有多种技术。摩擦较小的是:
open class ViewController: UIViewController {
open var hidesNavigationBarWhenPushed = false
override open func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
navigationController?.setNavigationBarHidden(hidesNavigationBarWhenPushed, animated: animated)
}
}
但这会给你这个result。
或者,我建议使用我新建的HidesNavigationBarWhenPushed library。 Here is the explanation了解它的工作原理以及为什么要构建它。