转换后iOS状态栏背景变黑

Posted

技术标签:

【中文标题】转换后iOS状态栏背景变黑【英文标题】:iOS statusBar background goes to black after transition 【发布时间】:2018-06-06 13:05:44 【问题描述】:

我正在从 UINavigationController 中的 VC1 推送到 VC2。 VC2 有一个透明的导航栏。

在 VC2 内部的 viewDidLoad 中:

self.navigationController?.navigationBar.isTranslucent = true
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationController?.navigationBar.barTintColor = .clear
self.navigationController?.navigationBar.backgroundColor = .clear

当我按下后退按钮时,我想恢复导航栏(绿色),所以在 viewWillDissapear 里面我有以下内容:

self.navigationController?.navigationBar.isTranslucent = false
self.navigationController?.navigationBar.setBackgroundImage(nil, for: .default)
self.navigationController?.navigationBar.barTintColor = .green
self.navigationController?.navigationBar.backgroundColor = .green

但是我在转换时得到了这个奇怪的黑色状态栏:

Here is a sample project

这是预期的过渡:

【问题讨论】:

这与 statusBar 背景无关。尝试更改它的浅色内容,您将能够在两个屏幕上看到状态栏。这与您的导航栏有关,在中转时会变黑,并且您的状态栏是黑暗的,因此看起来像是状态栏问题。 所以我想更改导航栏的中转颜色以避免像 twitter 那样出现这个问题 设置self.navigationController?.navigationBar.backgroundColor = .clear 时,您会看到窗口也是黑色的。因此,将您的窗口背景颜色设置为某种颜色而不是黑色,那么您会看到不同之处。 我没有推特,请您也为推特添加相同的动画吗? @TheTiger 我添加了一张图片来显示我想要的目标 【参考方案1】:

你可以试试下面,

override func viewDidLoad() 
    super.viewDidLoad()

    UINavigationBar.appearance().backgroundColor = .clear
    UINavigationBar.appearance().barTintColor = .clear

    self.navigationController?.navigationBar.shadowImage = UIImage()
    self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)

override func viewWillDisappear(_ animated: Bool) 
    super.viewWillDisappear(animated)

    UINavigationBar.appearance().backgroundColor = .green
    UINavigationBar.appearance().barTintColor = .green

    self.navigationController?.navigationBar.setBackgroundImage(nil, for: .default)

【讨论】:

这越来越好,问题是我还需要将 isTranslucent 设置为 true,因为我想要透明,当我返回时,我需要设置回 false 你可以设置 self.navigationController?.navigationBar.isTranslucent = true,它会给你同样的输出 @Godfather 对你有帮助吗? 它有帮助,但并不完全像我展示的那样。有了这个,导航栏在过渡后会出现很多问题,但无论如何还是谢谢!

以上是关于转换后iOS状态栏背景变黑的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS8 中使用 clipsToBounds = YES 时,状态栏完全变黑。我该如何改变?

iOS搜索时状态栏文字颜色修改

为啥ios中的状态栏和导航栏背景颜色不同

使用 ActionMode 时,Lollipop 状态栏变黑

flutter开发使用AnnotatedRegion修改状态栏字体颜色,导致导航栏也变黑了的解决方法

iOS7状态栏问题