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

问题描述 投票:9回答:3

嘿家伙我已经使用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

UPDATE

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

ios swift uinavigationcontroller uinavigationbar
3个回答
0
投票

你在代码中尝试过这个吗?

self.navigationController.navigationBar.translucent = NO;

0
投票

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

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

您的层次结构将如下所示:

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

extendedLayoutIncludesOpaqueBars = true

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

现在你应该不再有差距了 - 但是你可能会遇到关于UI元素的问题。您可以通过使用安全区域插入并根据需要调整布局来处理它,使用edgesForExtendedLayout也可能会有所帮助,具体取决于您的布局。

TL; DR使用extendedLayoutIncludesOpaqueBars = true


0
投票

试试这个。它应该将您的根视图控制器导航栏颜色设置为您想要的颜色:

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
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.