NSAttributedString — was ist das, Textformatierung und Attribute in iOS

Autor: IT Sectr Veröffentlicht: 2026-07-23 Lesezeit: 9 Min.

NSAttributedString ist eine Klasse aus dem Foundation-Framework im iOS SDK, die einen String mit einer Reihe von Formatierungsattributen darstellt, die auf einzelne Zeichen oder Textbereiche angewendet werden. Im Gegensatz zu normalem NSString speichert NSAttributedString nicht nur Unicode-Zeichen, sondern auch ein Wörterbuch mit Attributen (Schriftart, Farbe, Kerning, Ausrichtung) für jedes Segment des Strings. Laut Apple Developer Documentation (2026) ist NSAttributedString die Grundlage für die Anzeige von formatiertem Text in allen iOS-UI-Komponenten.

Wichtige Punkte

  • NSAttributedString — ein unveränderlicher String mit Attributen, bei dem jedes Zeichen oder jeder Bereich einem NSAttributedStringKey-Wörterbuch entspricht
  • NSMutableAttributedString — eine veränderliche Version mit addAttribute-, setAttributes-, replaceCharacters-Methoden zum Ändern von Attributen zur Laufzeit
  • Wichtige Attribute: .font, .foregroundColor, .paragraphStyle, .kern, .underlineStyle, .strikethroughStyle, .link, .backgroundColor
  • NSMutableParagraphStyle — ein Hilfsobjekt zum Festlegen von Ausrichtung, Zeilenabstand, Einzügen und Textrichtung
  • UILabel, UITextView, UITextField unterstützen attributedText zur Anzeige von attributierten Strings

Was ist NSAttributedString?

NSAttributedString ist eine grundlegende iOS/macOS-Klasse für die Arbeit mit formatiertem Text. Sie erweitert NSString, indem sie dem String Attribute hinzufügt — ein Wörterbuch von Schlüssel-Wert-Paaren, bei dem der Schlüssel eine NSAttributedStringKey-Konstante (z. B. .font, .foregroundColor) und der Wert das entsprechende Objekt (UIFont, UIColor) ist. Jedes Zeichen im String kann seinen eigenen Satz von Attributen haben, was gemischte Formatierung innerhalb eines einzelnen Strings ermöglicht.

Die Architektur von NSAttributedString basiert auf dem Konzept der Attributläufe (attribute runs). Wenn Sie das .font-Attribut auf UIFont.boldSystemFont(ofSize: 16) für den Zeichenbereich 0..5 setzen, werden alle Zeichen dieses Bereichs fett dargestellt. Andere Zeichen können eine andere Schriftart oder gar kein Attribut haben. Beim Rendern eines attributierten Strings führt das UIKit-System die Merkmale aus verschiedenen Bereichen zusammen und rendert den Text einheitlich.

NSAttributedString ist unveränderlich — nach der Erstellung können seine Attribute und sein Inhalt nicht geändert werden. Für Änderungen gibt es die Unterklasse NSMutableAttributedString, die Methoden zum Hinzufügen, Entfernen und Ändern von Attributen in beliebigen Bereichen bietet. Diese Unterscheidung ist für die Multithreading wichtig: der unveränderliche NSAttributedString ist threadsicher, NSMutableAttributedString dagegen nicht.

Wichtige Textformatierungsattribute

NSAttributedString unterstützt etwa 40 Standardattribute, die in NSAttributedStringKey definiert sind. Jedes Attribut beeinflusst einen bestimmten Aspekt des Texterscheinungsbilds: Schriftart, Farbe, Position, Unterstreichung, Schatten, Kerning, Absatzstil und Hyperlinks. Zum Festlegen eines Attributs verwenden Sie eine NSAttributedStringKey-Konstante und weisen ihr ein Objekt des entsprechenden Typs zu.

AttributschlüsselWerttypZweck
.fontUIFontSchriftart und Textgröße
.foregroundColorUIColorTextfarbe
.backgroundColorUIColorHintergrundfarbe hinter dem Text
.paragraphStyleNSParagraphStyleAusrichtung, Zeilenabstand, Einzüge
.kernNSNumber (Float)Zeichenabstand (Kerning)
.underlineStyleNSUnderlineStyle (Int)Unterstreichungsstil (einfach, doppelt, dick, Muster)
.strikethroughStyleNSUnderlineStyle (Int)Durchstreichungsstil
.linkNSURLURL für interaktiven Hyperlink
.shadowNSShadowTextschatten mit Offset, blurRadius und Farbe
.baselineOffsetNSNumber (Float)Textversatz von der Grundlinie

NSParagraphStyle — Absatzformatierung

NSMutableParagraphStyle ist ein Objekt, das die visuellen Merkmale eines Absatzes verwaltet: Ausrichtung (.alignment: .left, .center, .right, .justified), Zeilenabstand (.lineSpacing), Absatzabstand (.paragraphSpacing), Einzug der ersten Zeile (.firstLineHeadIndent), linker und rechter Einzug (.headIndent, .tailIndent) und Textrichtung (.baseWritingDirection). ParagraphStyle wird auf einen Bereich angewendet, der Zeilenumbruchzeichen enthält, wenn die gleiche Formatierung für den gesamten Absatz erforderlich ist.

Wie man NSAttributedString im Code erstellt

Die Erstellung eines NSAttributedString erfolgt über einen Initialisierer, der einen String und ein Attributwörterbuch entgegennimmt. Die Attribute werden auf den gesamten String angewendet. Für gemischte Formatierung (unterschiedliche Attribute in verschiedenen Teilen des Strings) wird NSMutableAttributedString mit anschließendem Hinzufügen von Attributen zu bestimmten Bereichen verwendet. Objective-C verwendet ein NSAttributedStringKey: UIFont-Wörterbuch, während Swift ein typsicheres [NSAttributedString.Key: Any]-Wörterbuch verwendet.

swift
let plainText = "Hello, Swift!"

// Create with uniform attributes for the entire string
let attributes: [NSAttributedString.Key: Any] = [
    NSAttributedString.Key.font:
        UIFont.systemFont(ofSize: 18),
    NSAttributedString.Key.foregroundColor:
        UIColor.darkText,
    NSAttributedString.Key.kern: 1.5
]

let attributedString =
    NSAttributedString(string: plainText,
                        attributes: attributes)

Erstellung mit NSMutableParagraphStyle

Ein Beispiel demonstriert die Absatzformatierung über NSMutableParagraphStyle. Es werden zentrierte Ausrichtung, Zeilenabstand von 8 Punkten, Absatzabstand von 12 Punkten festgelegt. ParagraphStyle wird unter dem Schlüssel .paragraphStyle zum Attributwörterbuch hinzugefügt. NSAttributedString kopiert das übergebene paragraphStyle, sodass Sie es nach der Erstellung des Strings ändern können, ohne den bereits erstellten String zu beeinflussen.

swift
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.alignment = NSTextAlignment.center
paragraphStyle.lineSpacing = 8.0
paragraphStyle.paragraphSpacing = 12.0
paragraphStyle.firstLineHeadIndent = 20.0

let attributed = NSAttributedString(
    string: "Centered paragraph with spacing",
    attributes: [NSAttributedString.Key.paragraphStyle: paragraphStyle])

NSMutableAttributedString und Attributänderung

NSMutableAttributedString ist eine Unterklasse von NSAttributedString, die das Ändern von Inhalt und Attributen nach der Erstellung ermöglicht. Hauptmethoden: addAttribute(_:value:range:) zum Hinzufügen eines einzelnen Attributs zu einem Bereich; addAttributes(_:range:) zum Hinzufügen mehrerer Attribute; setAttributes(_:range:) zum Ersetzen aller Attribute in einem Bereich; removeAttribute(_:range:) zum Entfernen eines Attributs; replaceCharacters(in:with:) zum Ersetzen von Text.

addAttribute und addAttributes fügen Attribute zu vorhandenen hinzu, ohne bereits gesetzte Attribute zu entfernen. Wenn ein Bereich bereits ein Attribut mit demselben Schlüssel hat, wird dessen Wert ersetzt. setAttributes ersetzt das Attributwörterbuch für einen Bereich vollständig — alle zuvor gesetzten Attribute werden entfernt. Dies ist wichtig zu verstehen, wenn man einen einzelnen String sequenziell formatiert: addAttributes ist sicherer, da es bereits gesetzte Schriftarten und Farben nicht zurücksetzt.

Bereiche (NSRange) werden mit der Struktur NSRange(location: 0, length: 5) angegeben. location ist der Startindex (0-basiert), length ist die Anzahl der Zeichen. Wenn der Bereich die Stringgrenzen überschreitet, löst NSMutableAttributedString eine NSRangeException aus. Für sichere Bereichsoperationen verwenden Sie NSRange-Methoden aus Foundation wie NSIntersectionRange und NSUnionRange.

swift
let attributed = NSMutableAttributedString(
    string: "Bold and red text here")

// Apply bold font to first 9 characters
let boldRange = NSRange(location: 0, length: 9)
attributed.addAttribute(
    NSAttributedString.Key.font,
    value: UIFont.boldSystemFont(ofSize: 16),
    range: boldRange)

// Apply red color to characters 13-16 ("text")
let redRange = NSRange(location: 13, length: 4)
attributed.addAttribute(
    NSAttributedString.Key.foregroundColor,
    value: UIColor.red,
    range: redRange)

// Apply underline to the entire string
let fullRange = NSRange(location: 0,
                       length: attributed.length)
attributed.addAttribute(
    NSAttributedString.Key.underlineStyle,
    value: NSUnderlineStyle.single.rawValue,
    range: fullRange)

Beispiel zur Anzeige eines attributierten Strings in UILabel

Die häufigste Methode zur Anzeige eines NSAttributedString ist die Zuweisung an die attributedText-Eigenschaft eines UILabel. Im Gegensatz zur text-Eigenschaft verwendet attributedText Attribute für das Rendering und unterstützt gemischte Formatierung. Wichtig: Wenn attributedText gesetzt ist, ignoriert UILabel die Eigenschaften font, textColor und textAlignment — alle visuellen Merkmale stammen aus den NSAttributedString-Attributen.

swift
let label = UILabel()
label.numberOfLines = 0

let fullText = NSMutableAttributedString(
    string: "Price: $24.99 per month")

// Format "Price:" label with bold font
let priceLabelRange = NSRange(
    location: 0, length: 6)
fullText.addAttribute(
    NSAttributedString.Key.font,
    value: UIFont.boldSystemFont(ofSize: 16),
    range: priceLabelRange)

// Format "$24.99" with green color
let amountRange = NSRange(
    location: 7, length: 6)
fullText.addAttribute(
    NSAttributedString.Key.foregroundColor,
    value: UIColor.systemGreen(),
    range: amountRange)
fullText.addAttribute(
    NSAttributedString.Key.font,
    value: UIFont.boldSystemFont(ofSize: 22),
    range: amountRange)

// Apply gray color to "per month" text
let periodRange = NSRange(
    location: 14, length: 9)
fullText.addAttribute(
    NSAttributedString.Key.foregroundColor,
    value: UIColor.secondaryLabel,
    range: periodRange)

label.attributedText = fullText

Anzeige in UITextView mit interaktiven Links

UITextView unterstützt interaktive Links in NSAttributedString. Das .link-Attribut mit einer NSURL macht Text anklickbar. Zur Behandlung von Taps verwenden Sie den UITextViewDelegate mit der Methode textView(_:shouldInteractWith:in:interaction:). UITextView unterstützt auch Textauswahl und die Verwendung von UIMenuController für Standardoperationen (Kopieren, Suchen).

Konvertierung von NSAttributedString in HTML und RTF

NSAttributedString unterstützt die Konvertierung aus HTML und RTF über NSAttributedString.DocumentType. Zum Laden von HTML verwenden Sie den Initialisierer mit dem Parameter documentAttributes: NSAttributedString(data: htmlData, options: [.documentType: .html], documentAttributes: nil). Ähnlich für RTF: .rtf oder .rtfd. Dieser Mechanismus ist nützlich, um HTML-Inhalte ohne WebView anzuzeigen.

Für den Export nach HTML verwenden Sie die Methode data(from:documentAttributes:) mit einem Bereich und Dokumenttyp. HTML-Export: try attributedString.data(from: fullRange, documentAttributes: [.documentType: .html]). Die resultierenden Daten können in einer Datei gespeichert, an einen Server gesendet oder in einem WebView angezeigt werden. Beim Export werden Schriftarten, Farben, Ausrichtung, Listen — alle Formatierungsattribute — in CSS-Stile konvertiert.

Die RTF-Unterstützung ist besonders relevant für macOS-Anwendungen, wo RTF das Standardformat für Rich Text ist. iOS unterstützt ebenfalls das Lesen und Schreiben von RTF, verwendet es jedoch nicht als primäres Format. Der Unterschied zwischen RTF und RTFD: RTFD enthält eingebettete Ressourcen (Bilder), die in einem Verzeichnis verpackt sind. NSAttributedString kann beide Formate über eine einzige Schnittstelle verarbeiten.

swift
let htmlString = "<p><b>Bold<\/b> and <i>italic<\/i><\/p>"
guard let htmlData = htmlString.data(
    using: String.Encoding.utf8) else { return }

let options: [NSAttributedString.DocumentReadingOptionKey: Any] = [
    NSAttributedString.DocumentReadingOptionKey.documentType:
        NSAttributedString.DocumentType.html
]

let attributedFromHTML =
    try? NSAttributedString(
        data: htmlData,
        options: options,
        documentAttributes: nil)

Häufig gestellte Fragen

Was ist der Unterschied zwischen NSString und NSAttributedString?

NSString speichert nur eine Sequenz von Unicode-Zeichen ohne Formatierungsinformationen. NSAttributedString speichert Zeichen und enthält für jeden Teilbereich ein Wörterbuch mit Attributen (Schriftart, Farbe, Stil). Bei der Anzeige verwendet UIKit diese Attribute zum Rendering und erzeugt formatierten Text.

Warum zeigt UILabel keine NSAttributedString-Attribute an?

Der häufigste Grund ist die Verwendung der text-Eigenschaft anstelle von attributedText. Bei der Zuweisung über text werden alle Attribute ignoriert. Der zweite Grund: Nach dem Setzen von attributedText ändern Sie font, textColor oder textAlignment des UILabel — diese Änderungen setzen attributedText zurück. Verwenden Sie nur attributedText für formatierten Text.

Wie wendet man verschiedene Schriftarten auf einen einzelnen String an?

Erstellen Sie einen NSMutableAttributedString und rufen Sie addAttribute(.font, value: boldFont, range: boldRange) für jedes Segment mit einer anderen Schriftart auf. Jeder Aufruf wendet das Attribut nur auf den angegebenen Bereich an. Die verbleibenden Zeichen behalten die Standardschriftart oder eine zuvor festgelegte bei. So entstehen Attributläufe mit verschiedenen Schriftarten.

Funktioniert NSAttributedString mit mehrzeiligem Text?

Ja, NSAttributedString verarbeitet mehrzeiligen Text korrekt, einschließlich Zeilenumbruchzeichen ( ). UITextView und UILabel (mit numberOfLines = 0) brechen Text automatisch in eine neue Zeile um. NSMutableParagraphStyle verwaltet Zeilenabstand, Einzüge und Ausrichtung für jeden Absatz unabhängig.

Wie erstellt man farbigen Text mit verschiedenen Farben in einem String?

Verwenden Sie NSMutableAttributedString mit dem .foregroundColor-Attribut für jeden Farbbereich. Für roten Text: addAttribute(.foregroundColor, value: UIColor.red, range: firstRange). Für blauen: addAttribute(.foregroundColor, value: UIColor.blue, range: secondRange). Die Farben werden nur auf die angegebenen Zeichenbereiche angewendet.

Zusammenfassung

  • NSAttributedString — ein String mit Formatierungsattributen (Schriftart, Farbe, Stil), die in einem Wörterbuch für jeden Zeichenbereich gespeichert sind
  • NSMutableAttributedString — eine veränderliche Version mit addAttribute-, setAttributes- und removeAttribute-Methoden für dynamische Formatierung
  • Wichtige Attribute: .font, .foregroundColor, .paragraphStyle, .kern, .underlineStyle, .strikethroughStyle, .link, .shadow, .baselineOffset
  • NSMutableParagraphStyle verwaltet Ausrichtung, Zeilenabstand, Einzüge und Textrichtung für Absätze
  • UILabel, UITextView, UITextField unterstützen die Anzeige von formatiertem Text über die attributedText-Eigenschaft
  • HTML/RTF-Konvertierung — NSAttributedString unterstützt den Import und Export von formatiertem Text über documentType

Wir entwickeln eine mobile Applikation schlüsselfertig

IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.

Projekt besprechen

Lesen Sie auch