嘿家伙我已经使用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
你在代码中尝试过这个吗?
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
}
}