gpt4 book ai didi

ios - 如何在 iOS 13 的 Swift 中立即更改主题样式(用户界面样式)

转载 作者:行者123 更新时间:2023-12-02 11:44:29 24 4
gpt4 key购买 nike

我使用的是 Swift 5.1 和 Xcode 11.1,目前已完成深色模式设计的实现。

应用程序具有用户可以设置显示主题(浅色深色系统默认)的设置,目前如果应用程序在之后重新启动,它可以正常工作用户选择主题(我将此 bool 数据保存在 UserDefaults 中,并在 AppDelegate 文件中的应用程序启动时设置 UIAppearance)

这是我的代码

if #available(iOS 13.0, *) {
switch AppState.appThemeStyle {
case "dark":
window?.overrideUserInterfaceStyle = .dark
break
case "light":
window?.overrideUserInterfaceStyle = .light
break
default:
window?.overrideUserInterfaceStyle = .unspecified
}
}

但我可以看到许多应用程序在用户设置主题样式后立即更改显示主题。

我认为仅更改主题而重新启动应用程序不是一个好主意,并且主题应在用户设置主题样式后立即更改。

我尝试通过设置基本 View Controller 并在 ViewWillAppear 上设置用户界面样式来做到这一点,但导航栏和选项卡栏外观没有改变。

谁能告诉我如何处理这个问题吗?谢谢。

最佳答案

此代码是即时的,无需重新启动应用程序!

您只需调用与通知观察者模式进行用户交互的代码或直接调用该函数即可。

但重点是访问可见窗口并在那里overrideUserInterfaceStyle。例如,您可以从任何可见的 View 设置它,例如:

view.window?.overrideUserInterfaceStyle = .dark

已弃用但有效的方法

// Because you are using AppDelegate for this: (But it is going to be deprecated. read the following Note)
(UIApplication.shared.delegate as! AppDelegate).myFunctionThatChangesTheUserInterfaceStyle()

注意自 iOS 13 起,按键窗口不再是 appDelegate 的一部分,您应该 access it from sceneDelegate

关于ios - 如何在 iOS 13 的 Swift 中立即更改主题样式(用户界面样式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58588891/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com