SwiftUI Theming 是一个库,它可以在所有 Apple 平台(包括 iOS、macOS、tvOS、watchOS 和 visionOS)的 SwiftUI 中实现无缝主题化。
你可以将 swiftui-theming 作为 Swift Package 集成到你的 Xcode 项目中
https://github.com/alexanderwe/swiftui-theming
要通过 Package.swift
文件添加 swiftui-theming,请包含以下依赖项
.package(url: "https://github.com/alexanderwe/swiftui-theming", from: "0.1.0")
然后,将其添加到你的目标依赖项
.product(name: "Theming", package: "swiftui-theming")
在创建新主题之前,请定义你的应用中可用的颜色样式
import Theming
extension ThemeColorStyle {
/// A style for primary labels
static let primaryLabel: Self = Self(name: "primaryLabel")
// Define additional styles as needed
}
定义颜色样式后,实现一个创建主题的方法
import Theming
// MARK: - Available Themes
extension Theme {
static let `default`: Theme = .createDefaultTheme()
}
// MARK: - Theme Creation
extension Theme {
private static func createDefaultTheme() -> Theme {
let colors: Theme.ColorMap = [
.primaryLabel: ThemeColor(lightColor: .primary, darkColor: .primary)
]
return Theme(name: "Default", colors: colors)
}
}
要在你的应用中启用主题化,请将 ThemeManager
实例注入到你应用的场景中。
声明一个 @State
属性来保存你应用定义中的 ThemeManager
import SwiftUI
import Theming
@main
struct MyApp: App {
@State var myThemeManager: ThemeManager = ThemeManager(initialTheme: .default)
var body: some Scene {
WindowGroup {
ContentView()
}
.withThemeManager(themeManager: myThemeManager)
}
}
使用 .themeColor
方法在你的 SwiftUI 视图中应用主题颜色
struct ContentView: View {
var body: some View {
Text("Hello World")
.foregroundStyle(.themeColor(for: .primaryLabel))
}
}
完整的文档可在此处获取:here。
此库在 MIT 许可证下发布。 有关详细信息,请参见 LICENSE 文件。