Farben in Swift definieren

Aktualisiert am 9. Dezember 2020

Farben können per Code festgelegt werden, zum Beispiel wie folgt:

let backGround = UIColor(red: 215/255, green: 228/255, blue: 233/255, alpha: 1)

Mit einer Extension könnte man es noch etwas übersichtlicher gestalten:

extension UIColor
{
    convenience init(red: Int, green: Int, blue: Int)
    {
        let newRed = CGFloat(red)/255
        let newGreen = CGFloat(green)/255
        let newBlue = CGFloat(blue)/255

        self.init(red: newRed, green: newGreen, blue: newBlue, alpha: 1.0)
    }
}

let backGround = UIColor(red: 215, green: 228, blue: 233)

Seit iOS 11 / Swift 4 ist es jedoch einfacher geworden. Denn Farben können seitdem im Assets-Katalog festgelegt und so global verfügbar gemacht werden. Eine so definierte Farbe kann dann auch im Interface Builder ausgewählt werden.

Interface Builder

Dafür wählt man Assets.xcassets aus. Dort sollte zumindest der Eintrag “AppIcon” vorhanden sein. Klickt nun mit der rechten Maustaste unterhalb dieses Eintrags die freie Fläche an und wählt dann “New Color Set” aus. Dies führt dazu, dass eine neue “leere” Farbe mit der Bezeichnung “Color” hinzugefügt wird. Zur Bearbeitung dieser Farbe muss jetzt der Attributes inspector aufgerufen werden (Tastenkombination alt + cmd + 4). Wie Ihr dem Screenshot entnehmen könnt, lassen sich die Farbwerte unter “Red”, “Green” und “Blue” eintragen.

Colors in Assets.xcassets

Im Interface Builder findet man nun – nach der Auswahl eines Elements – im Attributes inspector die so definierte Farbe im Abschnitt “Named Colors”.

Select a color in the interface builder

Und im Code kann diese Farbe wie folgt zugewiesen werden:

let backGround = UIColor(named: "backGround")

SwiftUI

Und wie sieht es in SwiftUI aus? Auch hier wählt man zunächst Assets.xcassets aus. Im folgenden Beispiel soll eine neue Farbe mit der Bezeichnung „lightGreen“ definiert werden.

Create a new color in Xcode

Anschließend wird die Farbe wie folgt zugewiesen:

Color("lightGreen")
    .edgesIgnoringSafeArea(.all)

In diesem Beispiel wurde zusätzlich der Modifier .edgesIgnoringSafeArea hinzugefügt, damit die Farbe die gesamte Ansicht ausfüllt.

Fazit

Welchen Weg man bei der Festlegung der Farbe wählt, ist freilich Geschmacksache. Die Definition über den Assets-Katalog hat aber den Vorteil, dass die Farbe sowohl im Interface Builder als auch im Code zur Verfügung steht. Außerdem kann man eine Farbe an einem Ort — dem Assets-Katalog — modifizieren.