我希望应用程序坚持系统亮/暗模式,但有一个子视图坚持亮模式。
因此,从技术上讲,这应该有效:
myChildView.overrideUserInterfaceStyle = .light
这行不通!
因此有几种方法可以覆盖接口样式:
UIApplication.current.windows.first.overrideUserInterfaceStyle = .light
这适用于将整个应用程序锁定为灯光模式的情况。
myViewController.overrideUserInterfaceStyle = .light
这在我的任何视图控制器中都不起作用。
myViewControlller.view.overrideUserInterfaceStyle = .light
这也不起作用。
myChildView.overrideUserInterfaceStyle = .light
这是我需要做的,但不是。
我也没有在info.plist中指定它来将整个应用程序锁定到任何模式。
我是不是错过了什么?
更新
该问题在iOS 15或iOS 16测试版上仍然存在。以上方法似乎不起作用:
https://developer.apple.com/documentation/uikit/appearance_customization/supporting_dark_mode_in_your_interface/choosing_a_specific_interface_style_for_your_ios_app
我将其与UITraitCollection(userInterfaceLevel: .elevated)
一起使用,但应该与userInterfaceStyle一起使用。(你会得到一些日志,说你不应该覆盖traitCollection,只是忽略它们(
override var traitCollection: UITraitCollection {
UITraitCollection(traitsFrom: [super.traitCollection, UITraitCollection(userInterfaceStyle: .light)])
}
您尝试使用的文档中提到了一些例外情况,我不知道这是否是它不适用于您的原因:https://developer.apple.com/documentation/uikit/uiview/3238086-overrideuserinterfacestyle
如果指定不同的值,则新样式将应用于同一视图控制器所拥有的视图和所有子视图。(如果视图层次结构包含嵌入式子视图控制器的根视图,则子视图控制器及其视图不会继承接口样式。(