导航栏没有显示iOS swift

时间:2015-11-13 09:13:22

标签: ios swift uinavigationcontroller

我的应用程序中有多个视图控制器。我想在我的第一个视图控制器中隐藏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控制器的设置

enter image description here

enter image description here

编辑3:

这是我的导航控制器属性检查器 enter image description here

7 个答案:

答案 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)

我在快速项目中有同样的要求。

这就是我处理导航栏的方式

确保您的第一个屏幕嵌入到导航控制器

enter image description here

例如,我们有两个屏幕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)