大导航栏背景在滑回根时变得清晰 viewController

large Navigation Bar backGround gets clear color when swiping back to root viewController

我已经使用了 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
    }
    
}

我在 viewWillAppearviewDidLoad

中都记得 largeNavigationTitle()

更新

这是两种状态的截图:

滑动前:imgur.com/a/ZcSOrov

滑动时:imgur.com/a/DYeeot8

您在代码中尝试过吗?

self.navigationController.navigationBar.translucent = NO;

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

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

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

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

extendedLayoutIncludesOpaqueBars = true

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

现在您应该不会再看到间隙 - 但您可能会遇到 UI 元素在栏下的问题。您可以通过使用安全区域插图并根据需要调整布局来处理这个问题,根据您的布局,使用 edgesForExtendedLayout 也可能有所帮助。

TL;DR 使用 extendedLayoutIncludesOpaqueBars = true

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

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
    }

}