UIView覆盖UserInterfaceStyle不起作用



我希望应用程序坚持系统亮/暗模式,但有一个子视图坚持亮模式。

因此,从技术上讲,这应该有效:

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

如果指定不同的值,则新样式将应用于同一视图控制器所拥有的视图和所有子视图。(如果视图层次结构包含嵌入式子视图控制器的根视图,则子视图控制器及其视图不会继承接口样式。(

最新更新