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 的颜色?图像作为导航栏中的背景?

iOS开发之--使用storyboard下,tabbar小图标和文字颜色的设置

Swift:更改 iOS 13 的状态栏颜色

iOS StatusBar状态栏文字颜色更改

iOS 更改状态栏文字颜色

Swift:在 IOS13+ 上设置状态栏颜色(使用 statusBarManager)