首页 > 解决方案 > UITabBar barStyle 更改 - iOS 13 上的行为不一致

问题描述

让我解释一下设置。appdelegate 创建一个导航控制器并将我的 ViewController 设置为其 rootViewController。然后创建一个 tabbarcontroller 并将这个 navigationcontroller 添加到其中。overrideUserInterfaceStyle通过在标签栏对象上设置为亮来忽略/退出 iOS 13 暗模式。

viewController 有一个按钮。按下此按钮时,它会在暗模式和亮模式之间切换。它根据 isDark 属性将 navigationBar 和 tabBar 的 barStyle 更改为深色或默认值。当我第一次点击按钮更改主题时,navigationBar 会更改样式,但 tabBar 不会。但是,您进行任何类型的 UI 更新,例如拉起应用切换器、激活控制中心、更改背景颜色、设置动画等,tabBar 会立即更改为设置的样式。这只发生在 iOS 13 上(我确保 traitColletion 没有改变)。同样的事情在 iOS 12 及更低版本上也能完美运行。如果您更新 tabBar 下的任何内容,它会将样式更新为您设置的样式。

这是我的 viewController 上的代码

class TestViewController: UIViewController
{
    override var preferredStatusBarStyle: UIStatusBarStyle
    {
        return .default
    }

    var dark = true

    override func viewDidLoad()
    {
        title = "ABCD"
        view.backgroundColor = .white
        super.viewDidLoad()
        let button = UIButton()
        button.setTitleColor(.systemTintBlue, for: .normal)
        button.setTitle("Theme", for: .normal)
        button.addTarget(self, action: #selector(buttonPress), for: .touchUpInside)
        view.addSubview(button)
        button.translatesAutoresizingMaskIntoConstraints = false
        button.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        button.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
    }

    @objc func buttonPress()
    {
        if dark
        {
//            view.backgroundColor = .gray
            tabBarController?.tabBar.barStyle = .black
            navigationController?.navigationBar.barStyle = .black
            dark = false
            return
        }
        dark = true
        tabBarController?.tabBar.barStyle = .default
        navigationController?.navigationBar.barStyle = .default
//        view.backgroundColor = .darkGray
    }
}

其他意见

标签: iosswiftuitabbarcontrolleruitabbarios-darkmode

解决方案


推荐阅读