我想定義一個像 SwiftUI 原色這樣的顏色!現在我正在解決我在代碼中使用colorScheme和使用if類似的問題:
struct ContentView: View {
var body: some View {
CustomPrimaryView()
.frame(width: 100.0, height: 100.0)
.cornerRadius(10.0)
Color.primary
.frame(width: 100.0, height: 100.0)
.cornerRadius(10.0)
}
}
struct CustomPrimaryView: View {
@Environment(\.colorScheme) var colorScheme
var body: some View {
colorScheme == .light ? Color(red: 0.1, green: 0.1, blue: 0.1) : Color(red: 0.95, green: 0.95, blue: 0.95)
}
}
我想定義一個 customPrimary Color 并將其作為 Color 而不是作為 View 訪問,它動態地完成我在該視圖中所做的作業。我們如何在 SwiftUI 中做到這一點?
uj5u.com熱心網友回復:
您所說的是一種動態顏色,它根據當前的外觀特征在應用于填充像素時選擇其 RGB 值。
SwiftUI Color(截至 2021 年)不直接支持在代碼中創建自定義動態顏色。這里有兩種創建動態Color.
資產目錄
您可以通過在資產目錄中創建顏色集來創建動態顏色。它看起來像這樣:

在Xcode 幫助中閱讀更多相關資訊:創建資產目錄和集。
然后,您可以Color使用Color.init(_ name: String, bundle: Bundle = nil)初始化程式將顏色集加載為 SwiftUI 。例如:
let myColor = Color("MyColor")
UIColor
您可以使用UIColor.init(dynamicProvider:)創建動態UIColor,然后將其包裝在 SwiftUI 中Color:
let uiColor = UIColor { traits in
if traits.userInterfaceStyle == .dark {
return .init(red: 0.567, green: 0.622, blue: 0.725, alpha: 1)
} else {
return .init(red: 0.204, green: 0.324, blue: 0.374, alpha: 1)
}
}
let color = Color(uiColor: uiColor)
如果您的目標是 macOS,則可以使用NSColor.init(name:dynamicProvider:).
uj5u.com熱心網友回復:
我想你想要這樣的東西
extension Color {
static var customPrimaryColor: Color {
let currentStyle = UIScreen.main.traitCollection.userInterfaceStyle
return currentStyle == .light ? Color(red: 0.1, green: 0.1, blue: 0.1) : Color(red: 0.95, green: 0.95, blue: 0.95)
}
}
你可以直接使用它
var body: some View {
Text("HELLO WORLD!")
.foregroundColor(.customPrimaryColor)
}
這將在設備的配色方案更改時自動更新
使用 Xcode 13 / iOS 15 測驗
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/314772.html
上一篇:如何使用新的SwiftStructuredConcurrency啟動后臺任務?
下一篇:未呼叫viewDidLoad()
