Ios 在iPad上使用window.overrideUserInterfaceStyle时,暗模式未启用/禁用
我通过在我的应用程序中调用Ios 在iPad上使用window.overrideUserInterfaceStyle时,暗模式未启用/禁用,ios,swift,xcode,uikit,uiscene,Ios,Swift,Xcode,Uikit,Uiscene,我通过在我的应用程序中调用window.overrideUserInterfaceStyle成功实现了暗模式切换。在真实的iPhone或模拟器中运行应用程序时,该功能工作正常 但是,当我在iPad上运行相同的脚本时,只有视图.overrideUserInterfaceStyle起作用。如果我尝试使用window.overrideUserInterfaceStyle,它不会更新trait集合(也不会调用traitCollectionDidChange(41;) 要更改我正在执行的样式(从白色样式更
window.overrideUserInterfaceStyle
成功实现了暗模式切换。在真实的iPhone或模拟器中运行应用程序时,该功能工作正常
但是,当我在iPad上运行相同的脚本时,只有视图.overrideUserInterfaceStyle
起作用。如果我尝试使用window.overrideUserInterfaceStyle
,它不会更新trait集合(也不会调用traitCollectionDidChange(41;
)
要更改我正在执行的样式(从白色样式更改为深色样式),请执行以下操作:
UIApplication.shared.connectedScenes.forEach{(场景:UIScene)位于
(scene.delegate为?SceneDelegate)?.window?.overrideUserInterfaceStyle=.dark//只有这一个可以在iPhone上使用。
}
UIApplication.shared.delegate?.window???.overrideUserInterfaceStyle=.dark//Force
UIWindow.appearance().overrideUserInterfaceStyle=.dark//Force
当执行上述代码时,它应该替换为明暗样式配置的所有UIView的颜色。UIColor
。也可以调用traitCollectionDidChange(41;
。但这些操作都不会在iPad模拟器上发生
上面的代码只适用于iPhone real/simulator,它应该也适用于iPad模拟器。我这里没有任何iPad能够使用黑色风格
也许是模拟器上的错误
我还尝试创建了一个示例应用程序,样式更改确实可以在iPad上运行,但因为它是一个没有库的干净项目,所以应该可以运行
我还试图最小化我的应用程序,但仍然无法正常工作,所以我担心这是否是库造成的冲突
当使用UIApplication
设置而不是UIScene
时,也会出现此问题
我将Xcode 11.3和Swift 5与一些Cocoapod库一起使用。如果您使用自定义转换,我建议您在完成动画后设置
viewController.overrideUserInterfaceStyle=.unspecified
像这样:
if#可用(iOS 13.0,*){
viewController.overrideUserInterfaceStyle=.dark
}
UIView.animate(持续时间:defaultAnimationDuration,延迟:0,动画:{
//设置viewController的动画
},完成:{[weak self]\uuIn
如果可用(iOS 13.0,*){
viewController.overrideUserInterfaceStyle=.unspecified
}
})
这将使您的
UIViewController
始终遵循UIWindow
用户界面样式。如果您使用的是自定义转换,我建议您在完成动画后设置viewController.overrideUserInterfaceStyle=.unspecified
像这样:
if#可用(iOS 13.0,*){
viewController.overrideUserInterfaceStyle=.dark
}
UIView.animate(持续时间:defaultAnimationDuration,延迟:0,动画:{
//设置viewController的动画
},完成:{[weak self]\uuIn
如果可用(iOS 13.0,*){
viewController.overrideUserInterfaceStyle=.unspecified
}
})
这将使您的
UIViewController
始终遵循UIWindow
用户界面风格。检查这一点,这可能是您的问题的答案@AdarshKC它不是。我知道如何使用overrideeUserInterfaceStyle
。在plist
中设置这一点不是一个选项。@AdarshKC我想我发现了这个问题。我在自定义转换中将overrideUserInterfaceStyle
应用到UIViewController
中。已删除此项以对问题进行排序。但现在我正在尝试修复样式冲突。请检查此项,这可能是您的问题@AdarshKC的答案,不是。我知道如何使用overrideUserInterfaceStyle
。请在中设置此项plist
不是一个选项。@AdarshKC我想我发现了问题。我在自定义转换中将overrideUserInterfaceStyle
应用到UIViewController
中。删除了它以对问题进行排序。但现在我正在尝试修复样式冲突。