SwiftUI zeichnet Symbole in Listen und Formularen auf macOS in der Akzentfarbe des Systems — nicht in der des Fensters. `.tint` an der Wurzel half deshalb nur der Reiterleiste; die Widget-Liste blieb systemgrün neben einer blauen Leiste, obwohl beides derselben Einstellung folgen soll. Ein eigener Label-Stil setzt die Farbe am Symbol. Er vererbt sich über die Umgebung, also genügt eine Zeile an denselben vier Wurzeln, an denen auch der Farbton gesetzt wird: Panel, Popovers, Einstellungen, Einrichtung. Ein Symbol, das seine Farbe selbst mitbringt, behält sie — die innere Angabe schlägt die äußere. Der grüne Haken für „erteilt" bringt sie jetzt am Symbol mit statt am ganzen Label: Grün heißt dort „erteilt" und ist keine Geschmacksfrage. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
31 lines
1.1 KiB
Swift
31 lines
1.1 KiB
Swift
import SwiftUI
|
|
|
|
/// Färbt das Symbol eines `Label` in der eingestellten Akzentfarbe.
|
|
///
|
|
/// **Nötig, weil `.tint` hier nicht greift.** SwiftUI zeichnet Symbole in
|
|
/// Listen und Formularen auf macOS in der Akzentfarbe des *Systems* — nicht in
|
|
/// der des Fensters. Das Ergebnis war eine Widget-Liste in Systemgrün neben
|
|
/// einer Reiterleiste in Onyx-Blau, obwohl beides derselben Einstellung folgen
|
|
/// soll.
|
|
///
|
|
/// Ein Stil statt einer Farbe an jeder Fundstelle: er vererbt sich über die
|
|
/// Umgebung, also genügt eine Zeile an der Wurzel. Ein Symbol, das seine Farbe
|
|
/// selbst mitbringt — etwa der grüne Haken für „erteilt" —, behält sie: die
|
|
/// innere Angabe schlägt die äußere.
|
|
public struct OnyxAccentLabelStyle: LabelStyle {
|
|
|
|
public init() {}
|
|
|
|
public func makeBody(configuration: Configuration) -> some View {
|
|
Label {
|
|
configuration.title
|
|
} icon: {
|
|
configuration.icon.foregroundStyle(Onyx.Color.accent)
|
|
}
|
|
}
|
|
}
|
|
|
|
public extension LabelStyle where Self == OnyxAccentLabelStyle {
|
|
static var onyx: OnyxAccentLabelStyle { OnyxAccentLabelStyle() }
|
|
}
|