相关疑难解决方法(0)

如何检测 iOS 13 中的 Light\Dark 模式变化?

某些 UI 设置无法在暗/亮模式下自动工作,因为UIColor. 例如shadow在图层中。因为我需要在明暗模式下删除和放置阴影,所以我需要在某个地方放置updateShadowIfNeeded()函数。我知道如何检测当前的模式:

func dropShadowIfNeeded() {
    switch traitCollection.userInterfaceStyle {
    case .dark: removeShadow()
    case .light: dropShadowIfNotDroppedYet()
    default: assertionFailure("Unknown userInterfaceStyle")
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我把这个函数放在 里面layoutSubviews,因为每次外观改变时它都会被调用:

override func layoutSubviews() {
    super.layoutSubviews()
    dropShadowIfNeeded()
}
Run Code Online (Sandbox Code Playgroud)

但是这个函数被调用了很多。只有在userInterfaceStyle更改时才触发的正确功能是什么?

uikit uitraitcollection swiftui ios-darkmode

8
推荐指数
1
解决办法
7151
查看次数

检测iOS暗模式更改

我通读了有关以下内容的文档:https : //developer.apple.com/documentation/appkit/supporting_dark_mode_in_your_interface

当用户更改系统外观时,系统会自动要求每个窗口和视图重绘自身。在此过程中,系统将为macOS和iOS调用下表中列出的几种众所周知的方法来更新您的内容。

在我们的旧版应用程序中,我们在每个类的初始化中将我们的视图创建为惰性变量。这意味着如果用户进入设置并切换到暗模式,则不会以正确的颜色绘制出w。

如果您在这些方法之外进行外观敏感的更改,则您的应用可能无法针对当前环境正确绘制其内容。解决方案是将代码移入这些方法。

我们的应用程序很大,将来会进行重构以更好地支持此功能,但我想知道是否可以通过通知中心检测到此更改,例如可以对Mac OS进行的操作:

如何使用Swift 3检测macOS默认模式与暗模式之间的切换

swift ios13

7
推荐指数
3
解决办法
1963
查看次数

标签 统计

ios-darkmode ×1

ios13 ×1

swift ×1

swiftui ×1

uikit ×1

uitraitcollection ×1