[英]Why is the UINavigationBar turning black?
问题:
我在UINavigationController
嵌入了一个UITableViewController
。 在表格视图中按下一个单元格会切换到另一个表格视图控制器。 在所述表格视图控制器中,我希望导航栏不可见,同时仍保留标签栏项目,因此我将以下内容添加到其viewDidLoad()
:
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.isTranslucent = true
self.navigationController?.navigationBar.tintColor = .black
对于第一个 UITableViewController,我希望导航栏正常,因此在其viewDidAppear()
我执行了以下操作:
self.navigationController?.navigationBar.isTranslucent = false
一切工作正常,除了在过渡期间(我正在通过performSegueWithIdentifier
),第一个视图控制器上的导航栏消失在黑色中,说实话看起来很难看。 有什么办法可以防止/解决这个问题吗?
截屏:
我最近有一个非常相似的问题。 尝试在视图控制器和self.edgesForExtendedLayout = UIRectEdgeNone
设置self.navigationController?.navigationBar.translucent = true
。
Storyboard 版本: Extended Edges - Under Top Bars
只需更改您的 navigationController 视图的 backgroundColor
navigationController?.view.backgroundColor = // whatever
您可以为导航栏的半透明设置动画。 因此,在第二个UITableViewController
的viewDidLoad
中,您可以编写以下内容:
override func viewDidLoad() {
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.tintColor = .blackColor()
// Play around with the duration until you find
// a time interval, you find suitable
UIView.animateWithDuration(2) {
self.navigationController?.navigationBar.translucent = true
}
}
将应用程序的窗口背景颜色更改为适合您的颜色:
self.window?.backgroundColor = .white
其他解决方案会导致多个内屏出现其他问题。
在 viewDidLoad 添加:
extendedLayoutIncludesOpaqueBars = true
对我来说有其他帮助( Swift 5 ):
self.navigationController?.navigationBar.isTranslucent = false
self.navigationController?.navigationBar.barTintColor = UIColor.green //change to needed color
下面的代码帮助我摆脱了iOS 15+ 中的黑色导航栏
if #available(iOS 15, *) {
let textAttributes = [NSAttributedString.Key.foregroundColor: UIColor.black]
let appearance = UINavigationBarAppearance()
appearance.configureWithOpaqueBackground()
appearance.titleTextAttributes = textAttributes
appearance.backgroundColor = UIColor.white // UIColor(red: 0.0/255.0, green: 125/255.0, blue: 0.0/255.0, alpha: 1.0)
appearance.shadowColor = .clear //removing navigationbar 1 px bottom border.
UINavigationBar.appearance().standardAppearance = appearance
UINavigationBar.appearance().scrollEdgeAppearance = appearance
}
iOS 15 改变了导航栏的呈现方式。 默认情况下它们是透明的。 在大多数情况下,默认情况下,导航栏下方没有任何内容,从而导致黑色。 AppDelegate(didFinishLaunchingWithOptions) 中的以下代码为我解决了这个问题。
if #available(iOS 15.0, *) {
let navBarAppearance = UINavigationBarAppearance()
navBarAppearance.configureWithOpaqueBackground()
//Configure additional customizations here
UINavigationBar.appearance().standardAppearance = navBarAppearance
UINavigationBar.appearance().scrollEdgeAppearance = navBarAppearance
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.