Attributed Text: wat is het, soorten attributen en stijlgeving

Auteur: IT Sectr Gepubliceerd: 2026-07-23 Leestijd: 8 min

Attributed Text is een mechanisme van iOS SDK, vertegenwoordigd door de klassen NSAttributedString en NSMutableAttributedString, waarmee meerdere stijlen kunnen worden toegepast op verschillende delen van een enkele tekstreeks. In tegenstelling tot gewone NSString, slaat Attributed String niet alleen tekens op, maar ook een woordenboek van attributen voor elk bereik: lettertype, kleur, regelafstand, schaduw en uitlijning. Volgens Apple Developer Documentation vormt Attributed String de basis voor het weergeven van opgemaakte tekst in UILabel, UITextView en UITextField. Het is de standaard manier om tekst te stylen zonder WebKit of externe bibliotheken.

Belangrijkste punten

  • NSAttributedString — onveranderlijke klasse voor het stylen van tekst via attributenwoordenboeken in iOS
  • Attributen omvatten lettertype, kleur, regelafstand, schaduw, onderstreping en uitlijning
  • NSMutableAttributedString — veranderlijke versie voor dynamische toepassing van stijlen
  • addAttributes past een attributenwoordenboek toe op een bereik, addAttribute — één attribuut
  • NSAttributedString wordt gebruikt in UILabel, UITextView, UITextField en Core Text

Wat is Attributed Text in iOS?

NSAttributedString is een klasse van het Foundation-framework die een reeks voorstelt met een set benoemde attributen die aan tekenbereiken zijn gekoppeld. Elk attribuut is een sleutel-waardepaar: de sleutel wordt gedefinieerd door een constante (NSFontAttributeName, NSForegroundColorAttributeName) en de waarde door een overeenkomstig object (UIFont, UIColor). Attributen worden toegepast op een tekenbereik via NSRange.

De klasse is beschikbaar op alle Apple-platforms: iOS (2.0+), macOS, tvOS, watchOS. NSAttributedString is onveranderlijk — na creatie zijn de attributen vast. Voor dynamische wijziging wordt NSMutableAttributedString gebruikt, dat overerft van NSAttributedString en methoden setAttributes, addAttributes, addAttribute, removeAttribute toevoegt.

Verschil met NSString

NSString is een eenvoudige tekenreeks zonder stijlinformatie. Elke tekst die via text aan UILabel wordt doorgegeven, wordt weergegeven met één lettertype, kleur en grootte. NSAttributedString dat via attributedText wordt doorgegeven, laat elk teken zijn eigen set attributen hebben. UILabel, UITextView en UITextField herkennen automatisch NSAttributedString en geven de tekst weer volgens de attributen.

Opslagformaat

Intern slaat NSAttributedString een NSString met de tekst en een array van attribuutbereiken op. Elk bereik wordt weergegeven door een NSRange-structuur en een attributenwoordenboek. Bij het renderen doorloopt het systeem de bereiken en past de overeenkomstige attributen toe op elk deel. De efficiëntie hangt af van het aantal attribuutswitches — frequente wisselingen op korte delen verhogen de renderingstijd.

Attributen van NSAttributedString

Attributen van NSAttributedString zijn constanten gedefinieerd in UIKit (iOS) en AppKit (macOS), die elk overeenkomen met een specifiek aspect van visuele tekstopmaak. Alle attributen zijn strings van NSAttributedString.Key en hun waarden zijn objecten van specifieke klassen. Attributen worden onderverdeeld in tekenattributen (beïnvloeden tekens) en alineaattributen (beïnvloeden alinea's).

Tekenattributen omvatten lettertype (NSFontAttributeName), tekstkleur (NSForegroundColorAttributeName), achtergrondkleur (NSBackgroundColorAttributeName), onderstreping (NSUnderlineStyleAttributeName), doorhaling (NSStrikethroughStyleAttributeName), schaduw (NSShadowAttributeName). Alineaattributen worden ingesteld via NSParagraphStyleAttributeName, die uitlijning, inspringingen, regelafstand en tabulatie regelt.

Attributen voor links en interactiviteit

NSLinkAttributeName maakt een klikbare link in de tekst: de waarde is een URL of string. UITextView verwerkt dergelijke links automatisch als interactie is ingeschakeld. NSAttachmentAttributeName maakt het mogelijk om een NSTextAttachment in te sluiten — een afbeelding in de tekst die wordt weergegeven als inline-element. Dit wordt gebruikt voor het maken van tekst met pictogrammen, emoji's of aangepaste weergaven in de reeks.

Basisattributen voor stijlgeving

Elk attribuut van NSAttributedString heeft een strikt getypeerde waarde. Laten we de meest gebruikte attributen in iOS-ontwikkeling bekijken. Het lettertype wordt ingesteld door een UIFont-object, de kleur door UIColor, de regelafstand via NSMutableParagraphStyle, waarmee uitlijning, inspringingen en afstanden in één object kunnen worden geconfigureerd.

AttribuutsleutelWaardetypeDoel
NSFontAttributeNameUIFontLettertype van de tekst
NSForegroundColorAttributeNameUIColorTekstkleur
NSBackgroundColorAttributeNameUIColorAchtergrondkleur onder de tekst
NSUnderlineStyleAttributeNameNSNumber (Int)Onderstrepingsstijl
NSParagraphStyleAttributeNameNSParagraphStyleAlinea-instellingen
NSKernAttributeNameNSNumber (Float)Letterafstand

NSParagraphStyle

NSParagraphStyle is een container voor alinea-attributen: alignment, lineSpacing, paragraphSpacing, firstLineHeadIndent, lineBreakMode, minimumLineHeight en andere. Om deze parameters te wijzigen, wordt een NSMutableParagraphStyle gemaakt, worden de gewenste eigenschappen geconfigureerd en wordt het object doorgegeven als waarde van het attribuut NSParagraphStyleAttributeName. Dit is de enige manier om de regelafstand in NSAttributedString te beheren.

Schaduw en effecten

NSShadow maakt het mogelijk om een schaduw aan tekst toe te voegen: de parameters shadowOffset, shadowBlurRadius, shadowColor bepalen de verschuiving, vervaging en kleur van de schaduw. De attributen voor onderstreping en doorhaling accepteren combinaties van stijlen: NSUnderlineStyle.single, .double, .thick, .patternDash, .patternDot. Voor nauwkeurige controle over de dikte en kleur van lijnen worden NSUnderlineColorAttributeName en NSStrikethroughColorAttributeName gebruikt.

Hoe NSAttributedString in code te gebruiken

Het maken van NSAttributedString in Swift gebeurt via een initialisator met opgave van tekst en attributenwoordenboek, of via NSMutableAttributedString met stapsgewijze toepassing van stijlen. De basisbenadering — een attributenwoordenboek definiëren voor de hele tekst, vervolgens attributen toevoegen of wijzigen voor afzonderlijke bereiken.

Maken met attributen voor de hele tekst

Een eenvoudig voorbeeld — het instellen van lettertype, kleur en uitlijning voor de hele reeks. Het attributenwoordenboek wordt doorgegeven aan de initialisator van NSAttributedString. De sleutels van het woordenboek zijn constanten van NSAttributedString.Key, de waarden zijn overeenkomstige UIKit-objecten. Dit is de basisvariant wanneer de hele tekst uniform wordt opgemaakt.

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

De tekst wordt weergegeven met lettertype systemFont 16, donkergrijze kleur, gecentreerde uitlijning en regelafstand van 4pt. Deze benadering is handig voor statische koppen en knoppen.

Toepassen op een bereik

NSMutableAttributedString maakt het mogelijk om verschillende stijlen toe te passen op verschillende delen van de tekst. De methode addAttribute voegt één attribuut toe aan een bereik, addAttributes — een attributenwoordenboek. De methode setAttributes vervangt alle attributen van het bereik door nieuwe. Dit is het belangrijkste hulpmiddel voor het maken van tekst met markeringen.

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

Het woord „1999“ wordt groen en vetgedrukt, de rest van de tekst — standaard. NSRange wordt handmatig berekend — het is belangrijk om de lengte correct in tekens te tellen, vooral bij het werken met emoji's en samengestelde Unicode-tekens.

Dynamische stijlen met NSMutableAttributedString

NSMutableAttributedString biedt methoden voor dynamische wijziging van tekst en attributen: append, insert, replace, delete, setAttributes, addAttribute, removeAttribute, enumerateAttributes. Dit maakt het mogelijk om tekst uit verschillende bronnen op te bouwen, stijlen te combineren en te reageren op interfacegebeurtenissen.

In tegenstelling tot onveranderlijke NSAttributedString ondersteunt de mutable versie wijziging van inhoud zonder een nieuw object te maken. Dit is essentieel voor teksteditors, chats en formulieren, waar de gebruiker tekst kan bewerken en stijlen behouden moeten blijven.

Stijlen combineren in chat

In berichtentoepassingen bevat elk bericht de gebruikersnaam (vetgedrukt), de berichttekst (normaal), de tijd (grijze kleur). NSMutableAttributedString maakt het mogelijk om zo'n reeks in één keer op te bouwen, door delen in de juiste volgorde met de juiste attributen toe te voegen.

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

Het resultaat — één reeks met drie stijlvolle delen. Append berekent automatisch correct de NSRange, posities hoeven niet handmatig te worden berekend. Deze benadering schaalt naar elk aantal fragmenten.

Attributen doorlopen

De methode enumerateAttributes(in:options:using:) doorloopt alle attribuutbereiken in het opgegeven interval. Dit is nuttig voor het analyseren van opmaak: het vinden van alle links, het wijzigen van de kleur van bepaalde attributen of het exporteren van tekst naar HTML. In de closure worden het attributenwoordenboek en de NSRange van het huidige deel doorgegeven.

Attributed Text in UIKit-componenten

Alle basis UI-componenten voor tekstweergave in UIKit ondersteunen NSAttributedString via de eigenschap attributedText. UILabel geeft statische gestileerde tekst weer, UITextView ondersteunt bewerken en links, UITextField accepteert attributen afzonderlijk voor placeholder en ingevoerde tekst.

UILabel met attributedText

UILabel is de lichtste component voor het weergeven van gestileerde tekst. Het ondersteunt alle tekenattributen, maar verwerkt klikbare links niet automatisch (daarvoor is UITextView nodig). UILabel is ideaal voor koppen, labels en korte teksten met opmaak.

UITextView met links

UITextView verwerkt NSLinkAttributeName en geeft links weer als interactieve elementen. Om deze functionaliteit in te schakelen, stelt u isSelectable = true en isEditable = false in. Bij het klikken op een link ontvangt de delegate de aanroep textView(_:shouldInteractWith:in:interaction:). UITextView ondersteunt ook NSTextAttachment voor afbeeldingen in de tekst.

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

Na het configureren van isSelectable en isEditable gedraagt het tekstgebied zich als een statisch tekstblok, maar blijven de links actief. De delegate UITextViewDelegate beheert het gedrag bij klikken.

Integratie met Core Text

Core Text is een low-level framework van Apple voor het renderen van tekst dat rechtstreeks met NSAttributedString werkt. In tegenstelling tot UIKit gebruikt Core Text NSAttributedString niet direct als weer te geven object, maar converteert het naar CTFramesetter, vervolgens naar CTFrame en rendert het in een Core Graphics-context. Dit geeft volledige controle over de plaatsing van regels en glyphs.

Het gebruik van Core Text is gerechtvaardigd voor aangepaste tekst lay-outs: kolommen, tekst rond afbeeldingen, tekstrotatie, niet-standaard regelafbrekingen. NSMutableParagraphStyle van Core Text bevat attributen die niet in UIKit bestaan: kCTParagraphStyleSpecifierMaximumLineSpacing, kCTParagraphStyleSpecifierLineBreakMode met extra modi.

Conversie tussen UIKit en Core Text

NSAttributedString wordt naadloos overgedragen tussen UIKit en Core Text, omdat beide frameworks met hetzelfde type werken. UIKit-attributen (NSFontAttributeName, NSForegroundColorAttributeName) worden automatisch herkend door Core Text en omgekeerd — Core Text-attributen (kCTFontAttributeName) worden gelezen door UIKit. Dit maakt het mogelijk om UIKit te gebruiken voor eenvoudige taken en Core Text voor aangepaste rendering op hetzelfde NSAttributedString-object.

Veelgestelde vragen

Waarin verschilt NSAttributedString van NSString?

NSString slaat alleen tekst op zonder stijlinformatie. NSAttributedString vult de tekst aan met een attributenwoordenboek voor elk tekenbereik. Bij doorgeven aan UILabel via de eigenschap text wordt NSString weergegeven als platte tekst. Bij doorgeven van NSAttributedString via de eigenschap attributedText worden alle attributen toegepast: verschillende lettertypes, kleuren en afstanden in één reeks.

Hoe voeg ik meerdere attributen toe aan één bereik?

Gebruik de methode addAttributes(_:range:) met een attributenwoordenboek: addAttributes([.font: font, .foregroundColor: color], range: range). Om één attribuut toe te voegen of te wijzigen, gebruikt u addAttribute(_:value:range:). De methode setAttributes vervangt alle bestaande attributen in het bereik door nieuwe.

Hoe wijzig ik de regelafstand in NSAttributedString?

Maak een NSMutableParagraphStyle, stel de eigenschap lineSpacing in en geef deze vervolgens door als waarde van het attribuut NSParagraphStyleAttributeName. Voor volledige controle zijn ook minimumLineHeight, maximumLineHeight, paragraphSpacing, lineBreakMode en alignment beschikbaar. ParagraphStyle is de enige manier om de regelafstand te beheren.

Werken attributen in SwiftUI?

Ja, SwiftUI ondersteunt NSAttributedString via Text(attributedString:) in iOS 15+. In oudere versies gebruikt u UIViewRepresentable met UILabel of UITextView. SwiftUI biedt ook zijn eigen type AttributedString (SwiftUI, niet Foundation) voor declaratieve opmaak met Markdown-achtige syntaxis.

Hoe bereken ik de grootte van een NSAttributedString?

Gebruik de methode boundingRect(with:options:context:), die de CGRect retourneert die nodig is om de reeks met de opgegeven attributen weer te geven. De parameter options: [.usesLineFragmentOrigin, .usesFontLeading] houdt rekening met regelafstanden en lettertypemetrieken. Voor UILabel met een beperkt aantal regels gebruikt u sizeThatFits.

Samenvatting

  • NSAttributedString — Foundation-klasse voor het stylen van tekst via attributenwoordenboeken in iOS
  • Attributen omvatten lettertype (UIFont), kleur (UIColor), onderstreping, schaduw en alinea-instellingen
  • NSMutableAttributedString — dynamische versie met toevoegen en verwijderen van attributen
  • addAttributes(_:range:) past een attributenwoordenboek toe op een tekenbereik
  • NSParagraphStyle beheert regelafstand, uitlijning en inspringingen
  • UILabel, UITextView, UITextField ondersteunen attributedText voor het weergeven van stijlen
  • Core Text gebruikt dezelfde NSAttributedString voor low-level rendering

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook