Attributed Text: vad är det, typer av attribut och stilering

Författare: IT Sectr Publicerad: 2026-07-23 Lästid: 8 min

Attributed Text är en mekanism i iOS SDK, representerad av klasserna NSAttributedString och NSMutableAttributedString, som gör det möjligt att tillämpa flera stilar på olika delar av en enda textsträng. Till skillnad från vanlig NSString lagrar Attributed String inte bara tecken utan även en ordbok med attribut för varje omfång: typsnitt, färg, radavstånd, skugga och justering. Enligt Apple Developer Documentation är Attributed String grunden för att visa formaterad text i UILabel, UITextView och UITextField. Det är standardsättet att stilera text utan WebKit eller tredjepartsbibliotek.

Huvudpunkter

  • NSAttributedString — oföränderlig klass för att stilera text via attributordböcker i iOS
  • Attribut omfattar typsnitt, färg, radavstånd, skugga, understrykning och justering
  • NSMutableAttributedString — föränderlig version för dynamisk tillämpning av stilar
  • addAttributes tillämpar en attributordbok på ett omfång, addAttribute — ett attribut
  • NSAttributedString används i UILabel, UITextView, UITextField och Core Text

Vad är Attributed Text i iOS?

NSAttributedString är en klass i Foundation-ramverket som representerar en sträng med en uppsättning namngivna attribut bundna till teckenomfång. Varje attribut är ett nyckel-värdepar: nyckeln definieras av en konstant (NSFontAttributeName, NSForegroundColorAttributeName) och värdet av ett motsvarande objekt (UIFont, UIColor). Attribut tillämpas på ett teckenomfång via NSRange.

Klassen finns tillgänglig på alla Apple-plattformar: iOS (2.0+), macOS, tvOS, watchOS. NSAttributedString är oföränderlig — efter skapande är dess attribut fixerade. För dynamisk ändring används NSMutableAttributedString, som ärver från NSAttributedString och lägger till metoderna setAttributes, addAttributes, addAttribute, removeAttribute.

Skillnad från NSString

NSString är en enkel teckensträng utan stilinformation. All text som skickas till UILabel via text visas med ett typsnitt, en färg och en storlek. NSAttributedString som skickas via attributedText tillåter varje tecken att ha sin egen uppsättning attribut. UILabel, UITextView och UITextField känner automatiskt igen NSAttributedString och renderar texten enligt attributen.

Lagringsformat

Internt lagrar NSAttributedString en NSString med texten och en array av attributomfång. Varje omfång representeras av en NSRange-struktur och en attributordbok. Vid rendering går systemet igenom omfången och tillämpar motsvarande attribut på varje del. Effektiviteten beror på antalet attributväxlingar — frekventa byten på korta delar ökar renderingstiden.

Attribut för NSAttributedString

Attribut för NSAttributedString är konstanter definierade i UIKit (iOS) och AppKit (macOS), som var och en motsvarar en specifik aspekt av visuell textformatering. Alla attribut är strängar av NSAttributedString.Key och deras värden är objekt av specifika klasser. Attribut delas in i teckenattribut (påverkar tecken) och styckeattribut (påverkar stycken).

Teckenattribut omfattar typsnitt (NSFontAttributeName), textfärg (NSForegroundColorAttributeName), bakgrundsfärg (NSBackgroundColorAttributeName), understrykning (NSUnderlineStyleAttributeName), genomstrykning (NSStrikethroughStyleAttributeName), skugga (NSShadowAttributeName). Styckeattribut ställs in via NSParagraphStyleAttributeName, som styr justering, indrag, radavstånd och tabulering.

Attribut för länkar och interaktivitet

NSLinkAttributeName skapar en klickbar länk i texten: värdet är en URL eller sträng. UITextView bearbetar automatiskt sådana länkar om interaktion är aktiverad. NSAttachmentAttributeName möjliggör inbäddning av ett NSTextAttachment — en bild i texten som visas som ett inline-element. Detta används för att skapa text med ikoner, emojis eller anpassade vyer inuti strängen.

Grundläggande attribut för stilering

Varje attribut i NSAttributedString har ett strikt typat värde. Låt oss titta på de mest använda attributen inom iOS-utveckling. Typsnitt ställs in av ett UIFont-objekt, färg av UIColor, radavstånd via NSMutableParagraphStyle, som gör det möjligt att konfigurera justering, indrag och avstånd i ett objekt.

AttributnyckelVärdetypSyfte
NSFontAttributeNameUIFontTextens typsnitt
NSForegroundColorAttributeNameUIColorTextfärg
NSBackgroundColorAttributeNameUIColorBakgrundsfärg under texten
NSUnderlineStyleAttributeNameNSNumber (Int)Understrykningsstil
NSParagraphStyleAttributeNameNSParagraphStyleStyckeinställningar
NSKernAttributeNameNSNumber (Float)Bokstavsavstånd

NSParagraphStyle

NSParagraphStyle är en behållare för styckeattribut: alignment, lineSpacing, paragraphSpacing, firstLineHeadIndent, lineBreakMode, minimumLineHeight och andra. För att ändra dessa parametrar skapas en NSMutableParagraphStyle, önskade egenskaper konfigureras och objektet skickas som värdet av attributet NSParagraphStyleAttributeName. Detta är det enda sättet att kontrollera radavstånd i NSAttributedString.

Skugga och effekter

NSShadow gör det möjligt att lägga till en skugga till texten: parametrarna shadowOffset, shadowBlurRadius, shadowColor ställer in förskjutning, oskärpa och färg på skuggan. Attributen för understrykning och genomstrykning accepterar kombinationer av stilar: NSUnderlineStyle.single, .double, .thick, .patternDash, .patternDot. För exakt kontroll över linjernas tjocklek och färg används NSUnderlineColorAttributeName och NSStrikethroughColorAttributeName.

Hur man använder NSAttributedString i kod

Att skapa en NSAttributedString i Swift görs via en initierare med angivande av text och attributordbok, eller via NSMutableAttributedString med stegvis tillämpning av stilar. Grundläggande tillvägagångssätt — definiera en attributordbok för hela texten, sedan lägga till eller ändra attribut för enskilda omfång.

Skapa med attribut för hela texten

Ett enkelt exempel — ställa in typsnitt, färg och justering för hela strängen. Attributordboken skickas till NSAttributedStrings initierare. Ordbokens nycklar är konstanter NSAttributedString.Key, värdena är motsvarande UIKit-objekt. Detta är grundvarianten när hela texten formateras enhetligt.

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

Texten visas med typsnitt systemFont 16, mörkgrå färg, centrerad justering och radavstånd på 4pt. Detta tillvägagångssätt är bekvämt för statiska rubriker och knappar.

Tillämpa på ett omfång

NSMutableAttributedString gör det möjligt att tillämpa olika stilar på olika delar av texten. Metoden addAttribute lägger till ett attribut till ett omfång, addAttributes — en attributordbok. Metoden setAttributes ersätter alla attribut i omfånget med nya. Detta är det främsta verktyget för att skapa text med markeringar.

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

Ordet “1999” blir grönt och fetstilt, resten av texten — standard. NSRange beräknas manuellt — det är viktigt att räkna längden korrekt i tecken, särskilt när man arbetar med emojis och sammansatta Unicode-tecken.

Dynamiska stilar med NSMutableAttributedString

NSMutableAttributedString tillhandahåller metoder för dynamisk ändring av text och attribut: append, insert, replace, delete, setAttributes, addAttribute, removeAttribute, enumerateAttributes. Detta gör det möjligt att bygga text från olika källor, kombinera stilar och reagera på gränssnittshändelser.

Till skillnad från oföränderlig NSAttributedString stöder den muterbara versionen ändring av innehåll utan att skapa ett nytt objekt. Detta är avgörande för textredigerare, chattar och formulär där användaren kan redigera text och stilarna måste bevaras.

Kombinera stilar i chatt

I meddelandeapplikationer innehåller varje meddelande användarnamn (fetstilt typsnitt), meddelandetext (normal), tid (grå färg). NSMutableAttributedString gör det möjligt att bygga en sådan sträng på en gång, genom att lägga till delar i rätt ordning med lämpliga attribut.

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

Resultatet — en sträng med tre stilmässiga delar. Append beräknar automatiskt NSRange korrekt, positioner behöver inte beräknas manuellt. Detta tillvägagångssätt skalas till valfritt antal fragment.

Iterera över attribut

Metoden enumerateAttributes(in:options:using:) går igenom alla attributomfång i det angivna intervallet. Detta är användbart för att analysera formatering: hitta alla länkar, ändra färg på vissa attribut eller exportera text till HTML. I closuren skickas attributordboken och NSRange för den aktuella delen.

Attributed Text i UIKit-komponenter

Alla grundläggande UI-komponenter för textvisning i UIKit stöder NSAttributedString via egenskapen attributedText. UILabel visar statisk stiliserad text, UITextView stöder redigering och länkar, UITextField accepterar attribut separat för platshållare och inmatad text.

UILabel med attributedText

UILabel är den lättaste komponenten för att visa stiliserad text. Den stöder alla teckenattribut, men bearbetar inte klickbara länkar automatiskt (för det krävs UITextView). UILabel är idealisk för rubriker, etiketter och korta texter med formatering.

UITextView med länkar

UITextView bearbetar NSLinkAttributeName och visar länkar som interaktiva element. För att aktivera denna funktionalitet, ställ in isSelectable = true och isEditable = false. När en länk klickas får delegaten anropet textView(_:shouldInteractWith:in:interaction:). UITextView stöder även NSTextAttachment för bilder i texten.

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

Efter konfigurering av isSelectable och isEditable beter sig textområdet som ett statiskt textblock, men länkarna förblir aktiva. Delegaten UITextViewDelegate hanterar beteendet vid klick.

Integration med Core Text

Core Text är ett lågnivåramverk från Apple för textrendering som arbetar direkt med NSAttributedString. Till skillnad från UIKit använder Core Text inte NSAttributedString direkt som ett objekt att visa, utan konverterar det till CTFramesetter, sedan till CTFrame och renderar i en Core Graphics-kontext. Detta ger full kontroll över placeringen av rader och glyfer.

Användning av Core Text är motiverad för anpassade textlayouter: kolumner, textflöde runt bilder, textrotation, icke-standardiserade radbrytningar. Core Texts NSMutableParagraphStyle innehåller attribut som inte finns i UIKit: kCTParagraphStyleSpecifierMaximumLineSpacing, kCTParagraphStyleSpecifierLineBreakMode med ytterligare lägen.

Konvertering mellan UIKit och Core Text

NSAttributedString överförs sömlöst mellan UIKit och Core Text, eftersom båda ramverken arbetar med samma typ. UIKit-attribut (NSFontAttributeName, NSForegroundColorAttributeName) känns automatiskt igen av Core Text och vice versa — Core Text-attribut (kCTFontAttributeName) läses av UIKit. Detta gör det möjligt att använda UIKit för enkla uppgifter och Core Text för anpassad rendering på samma NSAttributedString-objekt.

Vanliga frågor

Vad skiljer NSAttributedString från NSString?

NSString lagrar bara text utan stilinformation. NSAttributedString kompletterar texten med en attributordbok för varje teckenomfång. När den skickas till UILabel via egenskapen text visas NSString som vanlig text. När NSAttributedString skickas via egenskapen attributedText tillämpas alla attribut: olika typsnitt, färger och avstånd i samma sträng.

Hur lägger jag till flera attribut till ett omfång?

Använd metoden addAttributes(_:range:) med en attributordbok: addAttributes([.font: font, .foregroundColor: color], range: range). För att lägga till eller ändra ett attribut, använd addAttribute(_:value:range:). Metoden setAttributes ersätter alla befintliga attribut i omfånget med nya.

Hur ändrar jag radavståndet i NSAttributedString?

Skapa en NSMutableParagraphStyle, ställ in egenskapen lineSpacing och skicka den sedan som värdet av attributet NSParagraphStyleAttributeName. För full kontroll finns även minimumLineHeight, maximumLineHeight, paragraphSpacing, lineBreakMode och alignment tillgängliga. ParagraphStyle är det enda sättet att kontrollera radavståndet.

Fungerar attribut i SwiftUI?

Ja, SwiftUI stöder NSAttributedString via Text(attributedString:) i iOS 15+. I äldre versioner, använd UIViewRepresentable med UILabel eller UITextView. SwiftUI tillhandahåller också sin egen typ AttributedString (SwiftUI, inte Foundation) för deklarativ formatering med Markdown-liknande syntax.

Hur beräknar jag storleken på en NSAttributedString?

Använd metoden boundingRect(with:options:context:), som returnerar den CGRect som krävs för att visa strängen med angivna attribut. Parametern options: [.usesLineFragmentOrigin, .usesFontLeading] tar hänsyn till radavstånd och typsnittsmetrik. För UILabel med begränsat antal rader, använd sizeThatFits.

Sammanfattning

  • NSAttributedString — Foundation-klass för att stilera text via attributordböcker i iOS
  • Attribut omfattar typsnitt (UIFont), färg (UIColor), understrykning, skugga och styckeinställningar
  • NSMutableAttributedString — dynamisk version med tillägg och borttagning av attribut
  • addAttributes(_:range:) tillämpar en attributordbok på ett teckenomfång
  • NSParagraphStyle kontrollerar radavstånd, justering och indrag
  • UILabel, UITextView, UITextField stöder attributedText för att visa stilar
  • Core Text använder samma NSAttributedString för lågnivårendering

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också