【问题标题】:UINavigationController hide only navigationBar - Back animation issueUINavigationController 仅隐藏导航栏 - 后退动画问题
【发布时间】:2017-10-06 10:15:00
【问题描述】:

我在UINavigationController 中有三个视图控制器。在第二个中,我需要隐藏导航栏而不是后退按钮和其他栏按钮。因此我不能使用isNavigationBarHidden = true
目前我正在按以下方式处理上述问题:

第一个视图控制器:

override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        self.navigationController?.navigationBar.barTintColor = Constants.kThemeRedColor
        self.navigationController?.navigationBar.tintColor = UIColor.white
        self.navigationController?.navigationBar.barStyle = .black
        self.navigationController?.navigationBar.isTranslucent = false
    }

第二个viewController(只隐藏导航栏):

override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
        self.navigationController?.navigationBar.shadowImage = UIImage()
        self.navigationController?.navigationBar.isTranslucent = true
        self.navigationController?.view.backgroundColor = UIColor.clear
    } 

这里的问题是,当我在 firstViewController 之间导航时,在很短的时间内,当第一个 viewController 分别消失和出现时,我会看到一个黑色的导航栏。我知道这是因为用 2nd viewController 编写的代码。但我没有任何其他解决方案可以做到这一点。附上截图:

第一个 viewController(应该是怎样的):

第二个视图控制器:

第一个 viewController(带有短暂的黑色导航栏):

【问题讨论】:

  • 您的免费视图颜色是什么?导航栏下方是表格视图吗?

标签: ios swift uiviewcontroller uinavigationcontroller uinavigationbar


【解决方案1】:

First viewController中,同样将navigationBarbackgroundImageshadowImage设置为nil,即

class FirstVC: UIViewController
{
    override func viewWillAppear(_ animated: Bool)
    {
        super.viewWillAppear(animated)
        self.navigationController?.navigationBar.isTranslucent = true
        self.navigationController?.navigationBar.setBackgroundImage(nil, for: UIBarMetrics.default)
        self.navigationController?.navigationBar.shadowImage = nil
        self.navigationController?.navigationBar.barTintColor = .red
        self.navigationController?.navigationBar.tintColor = UIColor.white
        self.navigationController?.navigationBar.barStyle = .black
    }
}

class SecondVC: UIViewController
{
    override func viewWillAppear(_ animated: Bool)
    {
        super.viewWillAppear(animated)

        self.navigationController?.navigationBar.isTranslucent = true
        self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
        self.navigationController?.view.backgroundColor = UIColor.clear
        self.navigationController?.navigationBar.shadowImage = UIImage()
    }
}

【讨论】:

  • 效果很好。谢谢。我还需要问,从 VC1 到 VC2 时,同样的事情也会发生。在很短的时间内,VC1 的导航栏在导航到 VC2 时变黑。我该如何解决这个问题?
  • 也能正常工作。解决方案:在VC2中,设置:self.navigationController?.view.backgroundColor = Constants.kThemeRedColor
【解决方案2】:

您应该隐藏导航控制器的导航栏并使用 UIView 使用自定义导航栏。我想它会解决你的问题。

【讨论】:

    【解决方案3】:

    第一个 viewController 在快速转换时会在短时间内显示黑色导航栏,因为发生导航栏转换的 UIWindow 的背景颜色。简单地说,在您的 didFinishLaunchingWithOptions: AppDelegate 方法中添加这一行

    window?.backgroundColor = Constants.kThemeRedColor
    

    你就完成了。编码愉快!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-02
      • 2012-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-03
      • 1970-01-01
      相关资源
      最近更新 更多