繁体   English   中英

为什么 UINavigationBar 变黑了?

[英]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

您可以为导航栏的半透明设置动画。 因此,在第二个UITableViewControllerviewDidLoad中,您可以编写以下内容:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM