滑动回根视图控制器时,大型导航栏背景颜色变得清晰
Posted
技术标签:
【中文标题】滑动回根视图控制器时,大型导航栏背景颜色变得清晰【英文标题】:large Navigation Bar backGround gets clear color when swiping back to root viewController 【发布时间】:2018-05-22 07:56:01 【问题描述】:我使用了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
我在viewWillAppear
和viewDidLoad
都记得largeNavigationTitle()
更新
这是两种状态的截图:
刷卡前:imgur.com/a/ZcSOrov
刷卡时:imgur.com/a/DYeeot8
【问题讨论】:
你在用ib吗?在这种情况下,请检查故事板中的颜色是否正确。 @andromedainiative 我已经以编程方式实现了 navigationController,而不是在故事板中 @OmidKia 添加导航栏截图 @a.masri 在向后滑动之前:imgur.com/a/ZcSOrov 在向后滑动时:imgur.com/a/DYeeot8 @OmidKia 尝试设置条形色调self.navigationController?.navigationBar.barTintColor = UIColor.red
并设置isTranslucent
false
【参考方案1】:
试试这个。它应该将根视图控制器的导航栏颜色设置为您想要的颜色:
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
【讨论】:
【参考方案2】:您是否在代码中尝试过这个?
self.navigationController.navigationBar.translucent = NO;
【讨论】:
你的方法 largeNavigationTitle() 是在 rootViewController 中实现的吗? 它不应该被实施。我只需要子视图控制器中的大型导航控制器 是的,但是如果你滑回你的 rootViewController,方法就不再被调用了?【参考方案3】:这实际上是您的导航栏在底部控制器上变回小栏模式。
这是因为您的导航栏不是半透明的。这会导致(默认情况下)内容控制器停止在导航栏的底部。因此,当导航栏再次变小时,它的新的、较短的底部和视图控制器的顶部之间没有任何内容。
您的层次结构将如下所示:
现在UIViewController
上有一个默认为 false 的属性。您可以使用它来指定您希望控制器的视图在非半透明栏下扩展:
extendedLayoutIncludesOpaqueBars = true
这立即使层次结构现在显示为:
现在您应该不再有差距 - 但您可能会遇到 UI 元素在栏下方的问题。您可以通过使用安全区域插图并根据需要调整布局来处理这个问题,使用 edgesForExtendedLayout
也可能会有所帮助,具体取决于您的布局。
TL;DR 使用extendedLayoutIncludesOpaqueBars = true
【讨论】:
以上是关于滑动回根视图控制器时,大型导航栏背景颜色变得清晰的主要内容,如果未能解决你的问题,请参考以下文章