当导航回根视图控制器时,大导航栏backGround会获得清晰的颜色

时间:2018-05-22 07:56:02

标签: ios swift uinavigationcontroller uinavigationbar

嘿伙计们我已经使用largeNavigationBar了,直到我刷回根视图控制器并且大导航以令人讨厌的方式获得清晰的颜色之前它已经确定了。这是代码:

func largeNavigationTitle() {

    self.navigationController?.view.backgroundColor = VVUtility.navigationBarColor()
    let productTitle = request?.product?.name
    self.navigationItem.title = "\(productTitle ?? " ")".localized()
    self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor : UIColor.white, NSAttributedStringKey.font : VVUtility.normalFontWithPlusSize(increaseSize: -2.0)]

    if #available(iOS 11.0, *) {
        self.navigationController?.navigationBar.prefersLargeTitles = true
        self.navigationController?.navigationBar.backgroundColor = VVUtility.splashBackGroundColor()
        self.navigationController?.navigationBar.largeTitleTextAttributes = [NSAttributedStringKey.foregroundColor : UIColor.white, NSAttributedStringKey.font : VVUtility.normalFontWithPlusSize(increaseSize: 0.0)]
    } else {
        // Fallback on earlier versions
    }

}

我已在largeNavigationTitle()viewWillAppear

中召回viewDidLoad

更新

这是两种状态的屏幕截图: 在滑动之前:imgur.com/a/ZcSOrov 滑动时:imgur.com/a/DYeeot8

3 个答案:

答案 0 :(得分:0)

您是否在代码中尝试过此操作?

self.navigationController.navigationBar.translucent = NO;

答案 1 :(得分:0)

这实际上是您的导航栏更改回底部控制器上的小栏模式。

这是因为导航栏不是半透明的。这将导致(默认情况下)内容控制器停止在导航栏的底部。因此,当导航栏再次变小时,它的新的较短的底部和视图控制器的顶部之间将没有内容。

您的层次结构如下所示:

image

现在UIViewController上有一个属性,默认为false。您可以使用它来指定您希望控制器的视图在非透明栏下扩展:

extendedLayoutIncludesOpaqueBars = true

这立即使层次结构现在显示为:

image2

现在,您应该再也没有差距了,但是您可能会遇到UI元素在栏下的问题。您可以通过使用安全区域插图并根据需要调整布局来解决此问题,根据您的布局,使用edgesForExtendedLayout可能也会有所帮助。

TL; DR使用extendedLayoutIncludesOpaqueBars = true

答案 2 :(得分:0)

尝试一下。它将根View控制器的navigationBar的颜色设置为所需的颜色:

func largeNavigationTitle() {

    self.navigationController?.view.backgroundColor = VVUtility.navigationBarColor()
   //add the two lines below
    self.navigationController?.navigationBar.barTintColor = VVUtility.navigationBarColor()
    self.navigationController?.navigationBar.isTranslucent = false

    let productTitle = request?.product?.name
    self.navigationItem.title = "\(productTitle ?? " ")".localized()
    self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor : UIColor.white, NSAttributedStringKey.font : VVUtility.normalFontWithPlusSize(increaseSize: -2.0)]

    if #available(iOS 11.0, *) {
        self.navigationController?.navigationBar.prefersLargeTitles = true
        self.navigationController?.navigationBar.backgroundColor = VVUtility.splashBackGroundColor()
        self.navigationController?.navigationBar.largeTitleTextAttributes = [NSAttributedStringKey.foregroundColor : UIColor.white, NSAttributedStringKey.font : VVUtility.normalFontWithPlusSize(increaseSize: 0.0)]
    } else {
        // Fallback on earlier versions
    }

}