不是一件容易的事。除了更改整个系统范围的附加功能的界面样式之外,还没有找到这样做的好方法。大多数情况下,我在创建界面时将其设置为我想要的模式,并在它被关闭时将其设置回来。如果其他窥视者有更好的解决方案,我会全力以赴。
我的代码在 SwiftUI 中,所以你可能需要适应。我想要灯光模式在我身边,但那是等价的。
fileprivate static var currentWindowScene: UIWindowScene? {
UIApplication.shared.connectedScenes.first(where: { $0.activationState == .foregroundActive }) as? UIWindowScene
}
// Make sur the color picker is not inverted
if let windows = Self.currentWindowScene?.windows {
for window in windows {
if window.windowLevel != .normal && window.windowLevel != .alert && window.windowLevel != .statusBar {
if overriddenWindows[window] == nil {
DispatchQueue.main.async {
overriddenWindows[window] = window.overrideUserInterfaceStyle
}
}
window.overrideUserInterfaceStyle = .light
}
}
}
在其他地方(在 toolPicker 首次初始化时):
toolPicker.overrideUserInterfaceStyle = .light
当窗口关闭时:
.onDisappear {
if let windows = Self.currentWindowScene?.windows {
for window in windows {
if let overridden = overriddenWindows[window] {
window.overrideUserInterfaceStyle = overridden
}
}
overriddenWindows = .init()
}
}
绘制图像时:
var result: UIImage?
UITraitCollection(userInterfaceStyle: UIUserInterfaceStyle.light).performAsCurrent {
result = drawing.image(from: CGRect(x: 0, y: 0,
width:zoneSize.width,
height: zoneSize.height),
scale: UIScreen.main.scale)
}
return result