在 iOS 13 上使用时,我已更新我的 iOS 11+ 以支持暗模式。当在设备设置中启用或禁用 UserInterfaceStyle / 暗模式时,这可以正常工作。
但是,我想为用户提供仅为我的应用程序激活/停用暗模式的选项。
使用开关覆盖/切换UserInterfaceStyle
当前应用程序窗口没什么大不了的:
if #available(iOS 13.0, *) {
for window in UIApplication.shared.windows {
window.overrideUserInterfaceStyle = (uiStyleSwitch.isOn ? .dark : .light)
}
}
但是这种方法有两个缺点:
我想在暗模式、亮模式和系统首选项之间切换,其中前两个在当前系统设置上强制使用一种或另一种模式,第三个使用系统设置。但是设置后如何返回“使用系统设置”可以使用解决overrideUserInterfaceStyle
呢?使用.unspecified
似乎有效,但行为并未真正记录在案。是不是省着用?.uspecified
(见评论)这仅适用于当前可用的窗口。但是,不同的第 3 方控件和库会创建自己的窗口(例如显示 toast 消息、弹出窗口等)。由于我无法控制这些窗口的创建,我无法覆盖它们的样式。
所以问题是:是否可以为整个应用程序动态覆盖 UserInterfaceStyle?
我知道我可以选择样式,Info.plist
但这当然不能由用户更改。