簡體   English   中英

SwiftUI:使用資產目錄中的顏色集

[英]SwiftUI: Using Color Set from Asset Catalog

在 SwiftUI 中,我們可以使用以下命令從資產目錄中的顏色集中獲取顏色:

extension Color {
    static let coral = Color("coral")
}

這需要字符串類型的名稱,並且對於許多顏色集變得非常乏味。 是否有另一種獲取顏色集的方法,類似於我們使用圖像文字從資產目錄中獲取圖像的方式? 或者,只是一些不那么多余的東西。

如果不是,如何在 SwiftUI 中以編程方式創建動態顏色? 例如,這就是它在 UIKit 中的完成方式:

extension UIColor {
    static let dynamicColor = UIColor { $0.userInterfaceStyle == .dark ? .black : .white }
}

我想分享一種在資產目錄中定義動態顏色的替代方法,但不需要編寫繁瑣的代碼

Color("yellow")

1. 像往常一樣在資產目錄中定義你的顏色

在此處輸入圖像描述

2. 在您的代碼中,找到一個將您的顏色定義為變量的位置,在我的情況下,它將是這樣的:

extension Color {
    static let ui = Color.UI()
    
    struct UI {
         let yellow = Color("yellow")
    }
}

3. 完成

像這樣使用你的顏色:

Text("Hello").background(Color.ui.yellow)

這只需要在代碼中編寫硬編碼顏色 1 次。

如果不是,如何在 SwiftUI 中以編程方式創建動態顏色? 例如,這就是它在 UIKit 中的完成方式:

這幾乎是一樣的:

extension Color {
    static let dynamicColor = Color(UIColor { traitCollection in
        return traitCollection.userInterfaceStyle == .dark ? .black : .white
    })
}

備份

將擴展添加到Color是最簡單的

extension Color {
    static let primary = Color("Primary")
    static let secondary = Color("Secondary")
}

然后它很容易使用

Text("My Primary Color")
     .foregroundColor(.primary)

如果您需要將其用作UIColor ,則在 UIColor 上進行擴展並將實現更改為

Text("My Primary UIColor")
     .foregroundColor(Color(uiColor: .primary))

我很確定蘋果會把這個留給開發者。 例如,您可以為 SwiftUI 顏色編寫自定義SwiftGen (或稍等)模板。 https://github.com/SwiftGen/SwiftGen#colors

這是另一種方法:

import SwiftUI

enum AssetsColor : String
{
    case assetColorA
    case assetColorB
}

extension Color
{
    static func uiColor(_ name: AssetsColor) -> Color
    {
        return Color(name.rawValue)
    }
}

...

.backgroundColor(Color.uiColor(.assetColorA))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM