我的应用程序中有多个视图控制器。我想在我的第一个视图控制器中隐藏navigationbar
。所以我使用以下代码隐藏导航栏
navigationController?.setNavigationBarHidden(navigationController?.navigationBarHidden == false, animated: true);
现在我想在其他一些viewController中添加导航栏,但是我的导航栏在该viewcontroller中不可见。为什么会这样?
我的故事板显示了导航栏,但是一旦我尝试运行我的应用程序,它就消失了。
如果我从一个视图控制器隐藏导航栏,那么我们就无法使用导航控制器,是吗?我希望我错了。那么导航栏没有显示的原因是什么?
修改
此外,我只希望我的视图控制器处于纵向模式。所以我做了以下是导致问题吗?
extension UINavigationController{
public override func shouldAutorotate() -> Bool {
if (UIDevice.currentDevice().orientation == UIDeviceOrientation.LandscapeLeft ||
UIDevice.currentDevice().orientation == UIDeviceOrientation.LandscapeRight ||
UIDevice.currentDevice().orientation == UIDeviceOrientation.Unknown) {
return false
}
else {
return true
}
}
public override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
return [UIInterfaceOrientationMask.Portrait ,UIInterfaceOrientationMask.PortraitUpsideDown]
}
}
修改1:
我正在使用以下代码从故事板中移动一个视图控制器而不是链接。这会导致问题吗?
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let secondViewController = storyboard.instantiateViewControllerWithIdentifier("HomeVC")
presentViewController(secondViewController, animated: false, completion: nil)
编辑2:
请查看我的以下屏幕截图。这是我对secondview控制器的设置
编辑3:
答案 0 :(得分:30)
导航控制器是一个控制器,它有一堆视图控制器。所以,如果你有这样的事情:
NAV - > A - > (segue)B
即使您隐藏了导航栏,您仍然可以进行制作。你也不能在viewWillAppear的第二个(B)视图控制器中取消隐藏导航栏吗?首先,在viewWillAppear上隐藏它。
编辑:问题的最终解决方案: 使用:
tinymce.PluginManager.add('button', function(editor, url) {
editor.addMenuItem('button', {
icon: '',
text: 'Button',
onclick: function() {
tinyMCE.activeEditor.dom.addClass(tinyMCE.activeEditor.selection, 'test'); //not working
},
context: 'insert',
prependToContext: true
});
});
而不是:
let controller = storyboard.instantiateViewControllerWithIdentifier("HomeVC")
self.navigationController!.pushViewController(controller)
因为pushViewController会将secondViewController添加到其堆栈中。 presentViewController正在取代你的导航控制器,这就是你看不到导航栏的原因。
答案 1 :(得分:12)
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// Hide the navigation bar on the this view controller
self.navigationController?.setNavigationBarHidden(true, animated: animated)
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
// Show the navigation bar on other view controllers
self.navigationController?.setNavigationBarHidden(false, animated: animated)
}
答案 2 :(得分:4)
在视图控制器的viewDidLoad方法中,您不想显示导航栏添加行
navigationController.navigationBarHidden = true
您目前正隐藏在所有视图控制器中
编辑:您正在呈现视图控制器,而不应该是
self.navigationController!.pushViewController(controller)
答案 3 :(得分:2)
我在快速项目中有同样的要求。
这就是我处理导航栏的方式
确保您的第一个屏幕嵌入到导航控制器
中 例如,我们有两个屏幕A和B在屏幕A中,您需要隐藏 viewWillAppear
中的导航栏override func viewWillAppear(animated: Bool)
{
super.viewWillAppear(animated)
//hide navigation for screen A
self.navigationController?.navigationBarHidden = true
}
用于在屏幕B中启用导航 您需要在屏幕A中添加以下代码
override func prepareForSegue(segue: (UIStoryboardSegue!), sender: AnyObject!)
{
if (segue.identifier == "screen B's segue identifier here")
{
//enable navigation for screen B
navigationController?.setNavigationBarHidden(navigationController?.navigationBarHidden == false, animated: true)
}
}
使用上述样式,我可以随时启用或禁用特定屏幕的导航栏
答案 4 :(得分:1)
如果您需要仅在此控制器中隐藏此导航栏,最好的方法是在viewWillAppear()
中显示该导航栏并隐藏在{{1}}中。
答案 5 :(得分:1)
使用 Swift 4.0
隐藏viewcontroller
隐藏内容
隐藏navigationController
viewWillAppear
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.isNavigationBarHidden = true
}
取消隐藏navigationController
viewWillDisappear
override func viewWillDisappear(animated: Bool)
{
super.viewWillDisappear(animated)
self.navigationController?.isNavigationBarHidden = false
}
答案 6 :(得分:0)
回复还为时已晚,还有其他好的答案,但我想分享对我有用的内容。
let controller = self.storyboard?.instantiateViewControllerWithIdentifier("HomeVC")
self.navigationController!.pushViewController(controller!, animated:true)