ios - 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
}
}
其他意见
如果您继承 UITabBarController 并在 viewDidLoad 中应用某种样式,那么稍后更新样式将不起作用,那么您必须更改 UITabBarAppearance 并自己应用模糊效果。或者,您可以在 viewDidAppear 中设置样式
如果您将 UITabBarController 子类化,将 overrideUserInterfaceStyle 覆盖为浅色,并在 viewDidLoad 中将 barStyle 更改为默认值,则标签栏会显示为白色模糊,并且可以根据需要在深色和浅色之间切换。但是如果你设置了dark barStyle,它会以暗色模糊出现,以后无法更改
如果你继承UITabBarController,重写overrideUserInterfaceStyle为dark,无论你在viewDidLoad中设置barStyle是什么,barStyle总是dark并且不能改变
这些愚蠢的问题都不会在 iOS 12 上发生或发生。或者这是一个模拟器错误。我没有物理 iOS 13 设备。
解决方案
推荐阅读
- javascript - 在 Mozilla Web Docs 等网站中显示函数参数的格式是什么?
- javascript - 如何选择与 baseElement 相关的所有子项(特定类型)?
- python - 如何根据熊猫数据框中的用户选择显示值
- hive - 使用 Kerberos 通过代理设置与 Hive 的 Hue 连接
- robotframework - ZSH:命令不支持robotframework安装即pip install robotsframework command not found
- mongodb - 将 MongoDB 数据(AWS 实例)迁移到 Azure CosmoDB 时出现索引字段不支持错误
- webhooks - POST Webhook 以自动提交 Google 表单响应
- java - JPA:在父类和子类中都没有使用@IdClass 将外键插入到子类中
- html - 粘贴期间的代码正在添加 (Â-c2) 破坏整个页面
- serilog - 使用 serilog 在消息中记录文字 { } 并且还有参数