iOS Swift TabBar状态栏文字颜色毛刺半白半黑
Posted
技术标签:
【中文标题】iOS Swift TabBar状态栏文字颜色毛刺半白半黑【英文标题】:iOS Swift TabBar status bar text color glitch half white half black 【发布时间】:2021-01-03 15:25:33 【问题描述】:我正在尝试将某些视图控制器上的状态栏文本更改为白色,但在其他一些视图控制器上它仍然需要为黑色。 (因此无法为整个应用全局更改它)。
一切正常,除了前几秒钟,当点击不同的标签栏时,当出现故障时,状态栏文本的一半变成黑色,而不是白色。然后一切都会完美更新。
结构是这样的: 带有几个标签的标签栏控制器,每个标签包含一个导航控制器,包含一个视图控制器。
拥有导航控制器需要更改navigationController?.navigationBar.barStyle = .black
才能使其工作。
在选项卡上按几次后,它工作正常。
我做的第一件事当然是将.plist
中的View controller-based status bar appearance
设置为YES
我还覆盖了preferredStatusBarStyle,使用布尔值来设置哪些视图控制器应该具有白色或黑色状态栏文本:
override var preferredStatusBarStyle: UIStatusBarStyle
return coloredNavigationBar ? .lightContent : .default
var coloredNavigationBar: Bool = true
override func viewWillAppear(_ animated: Bool)
super.viewWillAppear(animated)
if coloredNavigationBar
navigationController?.navigationBar.barStyle = .black
else
navigationController?.navigationBar.barStyle = .default
setNeedsStatusBarAppearanceUpdate()
粘贴的代码来自随处使用的基本视图控制器。
【问题讨论】:
酷!但是我们如何重现这个? “单击不同的标签栏时”是什么意思?您的屏幕截图或代码中没有“标签栏”。 结构是这样的:一个标签栏控制器有几个标签,每个标签包含一个导航控制器,包含一个视图控制器。拥有导航控制器就必须更改 .barStyle 以使其工作。在标签上按几次后,它工作正常。粘贴的代码来自随处使用的基本视图控制器。 好的,所以问题是在导航控制器中,你的preferredStatusBarStyle
没有被调用。导航控制器从导航栏样式获取状态栏样式。而且,您有一个标签栏控制器作为您的***视图控制器,所以 it 可以说明状态栏样式是什么。您可能应该给标签栏控制器一个委托,以便它可以根据需要设置状态栏样式。
【参考方案1】:
是的! @matt 是对的,谢谢。确实,ios 在使用标签栏时会感到困惑。
解决方案是将其添加到 TabBarController:
override public var childForStatusBarStyle: UIViewController?
if let controller = selectedViewController as? UINavigationController
return controller.visibleViewController
return selectedViewController
【讨论】:
使用当前的 XCode 12.5.1 和 IOS 14.7.1 非常适合我以上是关于iOS Swift TabBar状态栏文字颜色毛刺半白半黑的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Swift 中更改 TabBar 的颜色?图像作为导航栏中的背景?