我经常通过以下方式使用语义颜色来为暗模式和亮模式提供动态颜色。使用这种方法,当用户切换暗/亮模式时,颜色也会在运行时更新:
public static var bw100: UIColor = {
if #available(iOS 13, *) {
return UIColor { (UITraitCollection: UITraitCollection) -> UIColor in
if UITraitCollection.userInterfaceStyle == .dark {
// Return the color for Dark Mode
return .black
} else {
// Return the color for Light Mode
return .white
}
}
} else {
// Return a fallback color for iOS 12 and lower.
return .white
}
}()
现在我想对一个Float
值做同样的事情,比如有一个语义浮点变量。这意味着我可以为暗模式和亮模式访问不同的浮点值,并且如果用户切换暗/亮模式,该值将在运行时适应。我找不到解决方案。
这不起作用,因为它不会在运行时更新。暗/亮模式切换后必须重新启动应用程序:
public static var myFloat: Float = {
if #available(iOS 13.0, *) {
if UITraitCollection.current.userInterfaceStyle == .dark {
return 0.9
}
else {
return 0.1
}
}
return 0.1
}()
这也不起作用(尝试了与上述工作类似的方法),但在这里我得到一个错误Initializer init(_:) requires that (UITraitCollection) -> Float conforms to BinaryInteger
public static var myFloat: Float = {
if #available(iOS 13, *) {
return Float { (UITraitCollection: UITraitCollection) -> Float in
if UITraitCollection.userInterfaceStyle == .dark {
// Return the Float for Dark Mode
return 0.9
} else {
// Return the Float for Light Mode
return 0.1
}
}
} else {
// Return a fallback for iOS 12 and lower.
return 0.1
}
}()