Attributed Text: Was es ist, Attributtypen und Stilisierung

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

Attributed Text ist ein Mechanismus des iOS SDK, dargestellt durch die Klassen NSAttributedString und NSMutableAttributedString, der es ermöglicht, mehrere Stile auf verschiedene Teile einer einzelnen Textzeichenfolge anzuwenden. Im Gegensatz zu einem gewöhnlichen NSString speichert Attributed String nicht nur Zeichen, sondern auch ein Attributwörterbuch für jeden Bereich: Schriftart, Farbe, Zeilenabstand, Schatten und Ausrichtung. Laut der Apple Developer Documentation ist Attributed String die Grundlage für die Anzeige von formatiertem Text in UILabel, UITextView und UITextField. Es ist die Standardmethode, um Text ohne WebKit oder Drittanbieter-Bibliotheken zu stylen.

Wichtige Punkte

  • NSAttributedString — eine unveränderliche Klasse zum Stylen von Text durch Attributwörterbücher in iOS
  • Attribute umfassen Schriftart, Farbe, Zeilenabstand, Schatten, Unterstreichung und Ausrichtung
  • NSMutableAttributedString — eine veränderliche Version zum dynamischen Anwenden von Stilen
  • addAttributes wendet ein Attributwörterbuch auf einen Bereich an, addAttribute wendet ein einzelnes Attribut an
  • NSAttributedString wird in UILabel, UITextView, UITextField und Core Text verwendet

Was ist Attributed Text in iOS?

NSAttributedString ist eine Klasse des Foundation-Frameworks, die eine Zeichenfolge mit einem Satz benannter Attribute darstellt, die an Zeichenbereiche gebunden sind. Jedes Attribut ist ein Schlüssel-Wert-Paar: Der Schlüssel ist durch eine Konstante definiert (NSFontAttributeName, NSForegroundColorAttributeName), und der Wert ist das entsprechende Objekt (UIFont, UIColor). Attribute werden über NSRange auf einen Zeichenbereich angewendet.

Die Klasse ist auf allen Apple-Plattformen verfügbar: iOS (2.0+), macOS, tvOS, watchOS. NSAttributedString ist unveränderlich — einmal erstellt, sind seine Attribute festgelegt. Für dynamische Änderungen wird NSMutableAttributedString verwendet, der von NSAttributedString erbt und die Methoden setAttributes, addAttributes, addAttribute, removeAttribute hinzufügt.

Unterschied zu NSString

NSString ist eine einfache Zeichenfolge ohne Stilinformationen. Jeder Text, der über text an UILabel übergeben wird, wird mit einer einzigen Schriftart, Farbe und Größe angezeigt. NSAttributedString, der über attributedText übergeben wird, ermöglicht es jedem Zeichen, seinen eigenen Satz von Attributen zu haben. UILabel, UITextView und UITextField erkennen NSAttributedString automatisch und rendern den Text entsprechend seinen Attributen.

Speicherformat

Intern speichert NSAttributedString einen NSString mit dem Text und ein Array von Attributbereichen. Jeder Bereich wird durch eine NSRange-Struktur und ein Attributwörterbuch dargestellt. Beim Rendern durchläuft das System die Bereiche und wendet die entsprechenden Attribute auf jeden Abschnitt an. Die Effizienz hängt von der Anzahl der Attributwechsel ab — häufige Änderungen in kurzen Abschnitten erhöhen die Renderzeit.

NSAttributedString-Attribute

NSAttributedString-Attribute sind Konstanten, die in UIKit (iOS) und AppKit (macOS) definiert sind, jede entspricht einem bestimmten Aspekt der visuellen Textgestaltung. Alle Attribute sind NSAttributedString.Key-Zeichenfolgen, und ihre Werte sind Objekte bestimmter Klassen. Attribute werden in Zeichenebene (betrifft Zeichen) und Absatzebene (betrifft Absätze) unterteilt.

Attribute auf Zeichenebene umfassen Schriftart (NSFontAttributeName), Textfarbe (NSForegroundColorAttributeName), Hintergrundfarbe (NSBackgroundColorAttributeName), Unterstreichung (NSUnderlineStyleAttributeName), Durchstreichung (NSStrikethroughStyleAttributeName), Schatten (NSShadowAttributeName). Attribute auf Absatzebene werden über NSParagraphStyleAttributeName festgelegt, der Ausrichtung, Einzug, Zeilenabstand und Tabulierung steuert.

Link- und Interaktivitätsattribute

NSLinkAttributeName erstellt einen klickbaren Link im Text: Der Wert ist eine URL oder Zeichenfolge. UITextView behandelt solche Links automatisch, wenn die Interaktion aktiviert ist. NSAttachmentAttributeName ermöglicht das Einbetten eines NSTextAttachment — ein Bild innerhalb des Textes, das als Inline-Element gerendert wird. Dies wird verwendet, um Text mit Symbolen, Emojis oder benutzerdefinierten Ansichten innerhalb einer Zeichenfolge zu erstellen.

Grundlegende Styling-Attribute

Jedes NSAttributedString-Attribut hat einen streng typisierten Wert. Betrachten wir die am häufigsten verwendeten Attribute in der iOS-Entwicklung. Die Schriftart wird über ein UIFont-Objekt festgelegt, die Farbe über UIColor, der Zeilenabstand über NSMutableParagraphStyle, der Ausrichtung, Einzug und Abstände in einem einzigen Objekt konfigurieren kann.

AttributschlüsselWerttypZweck
NSFontAttributeNameUIFontTextschriftart
NSForegroundColorAttributeNameUIColorTextfarbe
NSBackgroundColorAttributeNameUIColorHintergrundfarbe hinter dem Text
NSUnderlineStyleAttributeNameNSNumber (Int)Unterstreichungsstil
NSParagraphStyleAttributeNameNSParagraphStyleAbsatzeinstellungen
NSKernAttributeNameNSNumber (Float)Zeichenabstand (Kerning)

NSParagraphStyle

NSParagraphStyle ist ein Container für Absatzattribute: alignment, lineSpacing, paragraphSpacing, firstLineHeadIndent, lineBreakMode, minimumLineHeight und andere. Um diese Parameter zu ändern, wird ein NSMutableParagraphStyle erstellt, die gewünschten Eigenschaften werden festgelegt, und das Objekt wird als Wert des NSParagraphStyleAttributeName-Attributs übergeben. Dies ist die einzige Möglichkeit, den Zeilenabstand in NSAttributedString zu steuern.

Schatten und Effekte

NSShadow ermöglicht das Hinzufügen eines Schattens zum Text: Die Parameter shadowOffset, shadowBlurRadius, shadowColor legen Versatz, Unschärfe und Farbe des Schattens fest. Unterstreichungs- und Durchstreichungsattribute akzeptieren Stilkombinationen: NSUnderlineStyle.single, .double, .thick, .patternDash, .patternDot. Für die präzise Steuerung von Liniendicke und -farbe werden NSUnderlineColorAttributeName und NSStrikethroughColorAttributeName verwendet.

Verwendung von NSAttributedString im Code

Die Erstellung eines NSAttributedString in Swift erfolgt über einen Initialisierer mit dem Text und einem Attributwörterbuch oder über NSMutableAttributedString mit schrittweiser Stilanwendung. Der grundlegende Ansatz besteht darin, ein Attributwörterbuch für den gesamten Text zu definieren und dann Attribute für bestimmte Bereiche hinzuzufügen oder zu ändern.

Erstellung mit Attributen für den gesamten Text

Ein einfaches Beispiel — Schriftart, Farbe und Ausrichtung für die gesamte Zeichenfolge festlegen. Das Attributwörterbuch wird an den NSAttributedString-Initialisierer übergeben. Die Wörterbuchschlüssel sind NSAttributedString.Key-Konstanten, die Werte sind entsprechende UIKit-Objekte. Dies ist der Basisfall, wenn der gesamte Text einheitlich formatiert wird.

swift
let attributes: [NSAttributedString.Key: Any] = [
    .font: UIFont.systemFont(ofSize: 16),
    .foregroundColor: UIColor.darkGray,
    .paragraphStyle: let style = NSMutableParagraphStyle()
    style.alignment = .center
    style.lineSpacing = 4
    return style
]
let attributedString = NSAttributedString(
    string: "Hello world",
    attributes: attributes
)
label.attributedText = attributedString

Der Text wird mit systemFont 16, dunkelgrauer Farbe, zentrierter Ausrichtung und 4pt Zeilenabstand angezeigt. Dieser Ansatz ist praktisch für statische Überschriften und Schaltflächen.

Anwendung auf einen Bereich

NSMutableAttributedString ermöglicht die Anwendung verschiedener Stile auf verschiedene Teile des Textes. Die Methode addAttribute fügt ein einzelnes Attribut zu einem Bereich hinzu, addAttributes fügt ein Attributwörterbuch hinzu. Die Methode setAttributes ersetzt alle vorhandenen Attribute eines Bereichs durch neue. Dies ist das Hauptwerkzeug zum Erstellen von Text mit Hervorhebungen.

swift
let text = "Price: 1999 rubles"
let attributed = NSMutableAttributedString(string: text)
attributed.addAttribute(.foregroundColor,
    value: UIColor.green, range: NSRange(location: 6, length: 4))
attributed.addAttribute(.font,
    value: UIFont.boldSystemFont(ofSize: 20), range: NSRange(location: 6, length: 4))
label.attributedText = attributed

Das Wort „1999“ wird grün und fett sein, der restliche Text bleibt Standard. NSRange wird manuell berechnet — es ist wichtig, die Länge in Zeichen korrekt zu zählen, insbesondere bei der Arbeit mit Emojis und zusammengesetzten Unicode-Zeichen.

Dynamische Stile mit NSMutableAttributedString

NSMutableAttributedString bietet Methoden zum dynamischen Ändern von Text und Attributen: append, insert, replace, delete, setAttributes, addAttribute, removeAttribute, enumerateAttributes. Dies ermöglicht das Erstellen von Text aus verschiedenen Quellen, das Kombinieren von Stilen und das Reagieren auf Schnittstellenereignisse.

Im Gegensatz zum unveränderlichen NSAttributedString unterstützt die veränderliche Version das Ändern von Inhalten, ohne ein neues Objekt zu erstellen. Dies ist kritisch für Texteditoren, Chats und Formulare, in denen der Benutzer Text bearbeiten kann, während Stile erhalten bleiben müssen.

Kombinieren von Stilen in einem Chat

In Messengern enthält jede Nachricht den Benutzernamen (fett), den Nachrichtentext (normal), die Uhrzeit (graue Farbe). NSMutableAttributedString ermöglicht das Erstellen einer solchen Zeichenfolge auf einmal, indem Teile in der gewünschten Reihenfolge mit den entsprechenden Attributen hinzugefügt werden.

swift
let result = NSMutableAttributedString()
let name = NSAttributedString(string: "Anna: ",
    attributes: [.font: UIFont.boldSystemFont(ofSize: 15)])
let message = NSAttributedString(string: "Hello, how are you?",
    attributes: [.font: UIFont.systemFont(ofSize: 15)])
let time = NSAttributedString(string: " 12:30",
    attributes: [.foregroundColor: UIColor.gray])
result.append(name)
result.append(message)
result.append(time)
label.attributedText = result

Das Ergebnis ist eine einzelne Zeichenfolge mit drei gestylten Abschnitten. Append berechnet NSRange automatisch, Positionen müssen nicht manuell berechnet werden. Dieser Ansatz skaliert auf jede Anzahl von Fragmenten.

Auflisten von Attributen

Die Methode enumerateAttributes(in:options:using:) durchläuft alle Attributbereiche im angegebenen Intervall. Dies ist nützlich für die Formatierungsanalyse: Alle Links finden, die Farbe bestimmter Attribute ändern oder Text nach HTML exportieren. Dem Closure werden das Attributwörterbuch und der NSRange des aktuellen Abschnitts übergeben.

Attributed Text in UIKit-UI-Komponenten

Alle wichtigen UI-Komponenten zur Textanzeige in UIKit unterstützen NSAttributedString über die Eigenschaft attributedText. UILabel zeigt statischen gestylten Text an, UITextView unterstützt Bearbeitung und Links, UITextField akzeptiert Attribute für Platzhalter und eingegebenen Text getrennt.

UILabel mit attributedText

UILabel ist die leichteste Komponente zur Anzeige von gestyltem Text. Es unterstützt alle Attribute auf Zeichenebene, verarbeitet jedoch keine klickbaren Links automatisch (dafür wird UITextView benötigt). UILabel ist ideal für Überschriften, Beschriftungen und kurze formatierte Texte.

UITextView mit Links

UITextView verarbeitet NSLinkAttributeName und zeigt Links als interaktive Elemente an. Um diese Funktionalität zu aktivieren, setzen Sie isSelectable = true und isEditable = false. Beim Antippen eines Links erhält der Delegierte den Aufruf textView(_:shouldInteractWith:in:interaction:). UITextView unterstützt auch NSTextAttachment für Bilder innerhalb des Textes.

swift
let text = "Details on developer.apple.com"
let attributed = NSMutableAttributedString(string: text)
attributed.addAttribute(.link,
    value: URL(string: "https://developer.apple.com")!,
    range: NSRange(location: 0, length: text.count))
textView.attributedText = attributed
textView.isSelectable = true
textView.isEditable = false

Nach dem Setzen von isSelectable und isEditable verhält sich der Textbereich wie ein statischer Textblock, aber die Links bleiben aktiv. UITextViewDelegate steuert das Verhalten beim Antippen.

Integration mit Core Text

Core Text ist ein Low-Level-Framework von Apple zur Textdarstellung, das direkt mit NSAttributedString arbeitet. Im Gegensatz zu UIKit verwendet Core Text NSAttributedString nicht direkt als Anzeigeobjekt — stattdessen konvertiert es ihn in CTFramesetter, dann CTFrame und rendert in einem Core Graphics-Kontext. Dies gibt volle Kontrolle über das Zeilenlayout und die Glyphen.

Die Verwendung von Core Text ist gerechtfertigt für benutzerdefinierte Textlayouts: Spalten, Bildumlauf, Textdrehung, nicht standardmäßige Zeilenumbrüche. Der NSMutableParagraphStyle von Core Text enthält Attribute, die in UIKit nicht verfügbar sind: kCTParagraphStyleSpecifierMaximumLineSpacing, kCTParagraphStyleSpecifierLineBreakMode mit zusätzlichen Modi.

Konvertierung zwischen UIKit und Core Text

NSAttributedString wird nahtlos zwischen UIKit und Core Text übertragen, da beide Frameworks mit demselben Typ arbeiten. UIKit-Attribute (NSFontAttributeName, NSForegroundColorAttributeName) werden automatisch von Core Text erkannt und umgekehrt — Core Text-Attribute (kCTFontAttributeName) werden von UIKit gelesen. Dies ermöglicht die Verwendung von UIKit für einfache Aufgaben und Core Text für benutzerdefiniertes Rendern auf demselben NSAttributedString-Objekt.

Häufig gestellte Fragen

Was ist der Unterschied zwischen NSAttributedString und NSString?

NSString speichert nur Text ohne Stilinformationen. NSAttributedString ergänzt Text mit einem Attributwörterbuch für jeden Zeichenbereich. Wenn über die text-Eigenschaft an UILabel übergeben, wird NSString als einfacher Text angezeigt. Wenn NSAttributedString über attributedText übergeben wird, werden alle Attribute angewendet: verschiedene Schriftarten, Farben und Abstände in einer einzigen Zeichenfolge.

Wie fügt man mehrere Attribute zu einem Bereich hinzu?

Verwenden Sie die Methode addAttributes(_:range:) mit einem Attributwörterbuch: addAttributes([.font: font, .foregroundColor: color], range: range). Um ein einzelnes Attribut hinzuzufügen oder zu ändern, verwenden Sie addAttribute(_:value:range:). Die Methode setAttributes ersetzt alle vorhandenen Attribute im Bereich durch die übergebenen.

Wie ändert man den Zeilenabstand in NSAttributedString?

Erstellen Sie einen NSMutableParagraphStyle, setzen Sie die Eigenschaft lineSpacing, und übergeben Sie ihn dann als Wert des Attributs NSParagraphStyleAttributeName. Für vollständige Kontrolle sind auch minimumLineHeight, maximumLineHeight, paragraphSpacing, lineBreakMode und alignment verfügbar. ParagraphStyle ist die einzige Möglichkeit, den Zeilenabstand zu steuern.

Funktionieren Attribute in SwiftUI?

Ja, SwiftUI unterstützt NSAttributedString über Text(attributedString:) ab iOS 15+. In älteren Versionen verwenden Sie UIViewRepresentable mit UILabel oder UITextView. SwiftUI bietet auch seinen eigenen AttributedString-Typ (SwiftUI, nicht Foundation) für deklarative Formatierung mit Markdown-ähnlicher Syntax.

Wie berechnet man die Größe von NSAttributedString?

Verwenden Sie die Methode boundingRect(with:options:context:), die den CGRect zurückgibt, der zum Anzeigen der Zeichenfolge mit den gegebenen Attributen erforderlich ist. Der Parameter options: [.usesLineFragmentOrigin, .usesFontLeading] berücksichtigt Zeilenabstände und Schriftmetriken. Für UILabel mit einer begrenzten Anzahl von Zeilen verwenden Sie sizeThatFits.

Zusammenfassung

  • NSAttributedString — eine Foundation-Klasse zum Stylen von Text durch Attributwörterbücher in iOS
  • Attribute umfassen Schriftart (UIFont), Farbe (UIColor), Unterstreichung, Schatten und Absatzeinstellungen
  • NSMutableAttributedString — eine dynamische Version zum Hinzufügen und Entfernen von Attributen
  • addAttributes(_:range:) wendet ein Attributwörterbuch auf einen Zeichenbereich an
  • NSParagraphStyle steuert Zeilenabstand, Ausrichtung und Einzug
  • UILabel, UITextView, UITextField unterstützen attributedText zur Anzeige von Stilen
  • Core Text verwendet denselben NSAttributedString für Low-Level-Rendering

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