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

嘿伙计们我使用了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()

UPDATE

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

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

 self.navigationController.navigationBar.translucent = NO; 

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

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

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

图片

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

extendedLayoutIncludesOpaqueBars = true

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

图像2

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

TL; DR使用extendedLayoutIncludesOpaqueBars = true

尝试这个。 它应该将您的根视图控制器的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 } } 

请尝试在AppDelegate.swift中调用方法

  func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { }