Attributed Text: cos’è, tipi di attributi e stilizzazione

Autore: IT Sectr Pubblicato: 2026-07-23 Tempo di lettura: 8 min

Attributed Text è un meccanismo dell’iOS SDK, rappresentato dalle classi NSAttributedString e NSMutableAttributedString, che consente di applicare stili multipli a diverse parti di una stessa stringa di testo. A differenza di un normale NSString, Attributed String memorizza non solo i caratteri ma anche un dizionario di attributi per ogni intervallo: font, colore, interlinea, ombra e allineamento. Secondo la Documentazione per sviluppatori Apple, Attributed String è la base per visualizzare testo formattato in UILabel, UITextView e UITextField. È il modo standard per stilizzare il testo senza WebKit o librerie di terze parti.

Punti chiave

  • NSAttributedString — una classe immutabile per stilizzare il testo tramite dizionari di attributi in iOS
  • Gli attributi includono font, colore, interlinea, ombra, sottolineatura e allineamento
  • NSMutableAttributedString — una versione mutabile per applicare stili dinamicamente
  • addAttributes applica un dizionario di attributi a un intervallo, addAttribute applica un singolo attributo
  • NSAttributedString è usato in UILabel, UITextView, UITextField e Core Text

Cos’è Attributed Text in iOS?

NSAttributedString è una classe del framework Foundation che rappresenta una stringa con un insieme di attributi nominati legati a intervalli di caratteri. Ogni attributo è una coppia chiave-valore: la chiave è definita da una costante (NSFontAttributeName, NSForegroundColorAttributeName) e il valore è l’oggetto corrispondente (UIFont, UIColor). Gli attributi vengono applicati a un intervallo di caratteri tramite NSRange.

La classe è disponibile su tutte le piattaforme Apple: iOS (2.0+), macOS, tvOS, watchOS. NSAttributedString è immutabile — una volta creato, i suoi attributi sono fissi. Per modifiche dinamiche si usa NSMutableAttributedString, che eredita da NSAttributedString e aggiunge i metodi setAttributes, addAttributes, addAttribute, removeAttribute.

Differenza da NSString

NSString è una semplice stringa di caratteri senza informazioni di stile. Qualsiasi testo passato a UILabel tramite text viene visualizzato con un unico font, colore e dimensione. NSAttributedString, passato tramite attributedText, consente a ogni carattere di avere il proprio insieme di attributi. UILabel, UITextView e UITextField riconoscono automaticamente NSAttributedString e renderizzano il testo secondo i suoi attributi.

Formato di archiviazione

Internamente, NSAttributedString memorizza un NSString con il testo e un array di intervalli di attributi. Ogni intervallo è rappresentato da una struttura NSRange e un dizionario di attributi. Durante il rendering, il sistema scorre gli intervalli e applica gli attributi corrispondenti a ogni sezione. L’efficienza dipende dal numero di cambi di attributi — cambi frequenti su sezioni brevi aumentano il tempo di rendering.

Attributi di NSAttributedString

Gli attributi di NSAttributedString sono costanti definite in UIKit (iOS) e AppKit (macOS), ciascuna corrispondente a un aspetto specifico della formattazione visiva del testo. Tutti gli attributi sono stringhe NSAttributedString.Key e i loro valori sono oggetti di classi specifiche. Gli attributi si dividono in livello carattere (influenzano i caratteri) e livello paragrafo (influenzano i paragrafi).

Gli attributi di livello carattere includono font (NSFontAttributeName), colore del testo (NSForegroundColorAttributeName), colore di sfondo (NSBackgroundColorAttributeName), sottolineatura (NSUnderlineStyleAttributeName), barrato (NSStrikethroughStyleAttributeName), ombra (NSShadowAttributeName). Gli attributi di livello paragrafo sono impostati tramite NSParagraphStyleAttributeName, che controlla allineamento, rientro, interlinea e tabulazione.

Attributi di link e interattività

NSLinkAttributeName crea un link cliccabile nel testo: il valore è un URL o una stringa. UITextView gestisce automaticamente questi link se l’interazione è abilitata. NSAttachmentAttributeName consente di incorporare un NSTextAttachment — un’immagine all’interno del testo che viene visualizzata come elemento inline. Questo viene usato per creare testo con icone, emoji o viste personalizzate all’interno di una stringa.

Attributi di base della stilizzazione

Ogni attributo di NSAttributedString ha un valore rigorosamente tipizzato. Esaminiamo gli attributi più comunemente usati nello sviluppo iOS. Il font viene impostato tramite un oggetto UIFont, il colore tramite UIColor, l’interlinea tramite NSMutableParagraphStyle, che consente di configurare allineamento, rientro e spaziatura in un unico oggetto.

Chiave attributoTipo valoreScopo
NSFontAttributeNameUIFontFont del testo
NSForegroundColorAttributeNameUIColorColore del testo
NSBackgroundColorAttributeNameUIColorColore di sfondo dietro il testo
NSUnderlineStyleAttributeNameNSNumber (Int)Stile di sottolineatura
NSParagraphStyleAttributeNameNSParagraphStyleImpostazioni paragrafo
NSKernAttributeNameNSNumber (Float)Spaziatura tra lettere (kerning)

NSParagraphStyle

NSParagraphStyle è un contenitore per gli attributi di paragrafo: alignment, lineSpacing, paragraphSpacing, firstLineHeadIndent, lineBreakMode, minimumLineHeight e altri. Per modificare questi parametri, si crea un NSMutableParagraphStyle, si impostano le proprietà desiderate e l’oggetto viene passato come valore dell’attributo NSParagraphStyleAttributeName. Questo è l’unico modo per controllare l’interlinea in NSAttributedString.

Ombra ed effetti

NSShadow consente di aggiungere un’ombra al testo: i parametri shadowOffset, shadowBlurRadius, shadowColor impostano offset, sfocatura e colore dell’ombra. Gli attributi di sottolineatura e barrato accettano combinazioni di stili: NSUnderlineStyle.single, .double, .thick, .patternDash, .patternDot. Per un controllo preciso dello spessore e del colore delle linee, si usano NSUnderlineColorAttributeName e NSStrikethroughColorAttributeName.

Come usare NSAttributedString nel codice

La creazione di un NSAttributedString in Swift avviene tramite un inizializzatore con il testo e un dizionario di attributi, o tramite NSMutableAttributedString con applicazione passo passo degli stili. L’approccio di base è definire un dizionario di attributi per l’intero testo, quindi aggiungere o modificare attributi per intervalli specifici.

Creazione con attributi per l’intero testo

Un esempio semplice — impostare font, colore e allineamento per l’intera stringa. Il dizionario di attributi viene passato all’inizializzatore di NSAttributedString. Le chiavi del dizionario sono costanti NSAttributedString.Key, i valori sono oggetti UIKit corrispondenti. Questo è il caso base quando l’intero testo viene formattato uniformemente.

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

Il testo verrà visualizzato con systemFont 16, colore grigio scuro, allineamento centrato e interlinea di 4pt. Questo approccio è comodo per intestazioni e pulsanti statici.

Applicazione a un intervallo

NSMutableAttributedString consente di applicare stili diversi a parti diverse del testo. Il metodo addAttribute aggiunge un singolo attributo a un intervallo, addAttributes aggiunge un dizionario di attributi. Il metodo setAttributes sostituisce tutti gli attributi esistenti di un intervallo con nuovi attributi. Questo è lo strumento principale per creare testo con evidenziazioni.

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

La parola “1999” sarà verde e in grassetto, il resto del testo sarà standard. NSRange viene calcolato manualmente — è importante contare correttamente la lunghezza in caratteri, specialmente quando si lavora con emoji e caratteri Unicode composti.

Stili dinamici con NSMutableAttributedString

NSMutableAttributedString fornisce metodi per modificare dinamicamente testo e attributi: append, insert, replace, delete, setAttributes, addAttribute, removeAttribute, enumerateAttributes. Ciò consente di costruire testo da fonti diverse, combinare stili e rispondere agli eventi dell’interfaccia.

A differenza dell’immutabile NSAttributedString, la versione mutabile supporta la modifica del contenuto senza creare un nuovo oggetto. Questo è fondamentale per editor di testo, chat e moduli dove l’utente può modificare il testo mentre gli stili devono essere preservati.

Combinazione di stili in una chat

Nei messenger, ogni messaggio contiene il nome utente (grassetto), il testo del messaggio (normale), l’ora (colore grigio). NSMutableAttributedString consente di costruire tale stringa in una volta sola aggiungendo le parti nell’ordine desiderato con gli attributi corrispondenti.

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

Il risultato è un’unica stringa con tre sezioni stilizzate. Append calcola NSRange automaticamente, le posizioni non devono essere calcolate manualmente. Questo approccio si adatta a qualsiasi numero di frammenti.

Enumerazione degli attributi

Il metodo enumerateAttributes(in:options:using:) scorre tutti gli intervalli di attributi nell’intervallo specificato. Questo è utile per l’analisi della formattazione: trovare tutti i link, cambiare il colore di attributi specifici o esportare testo in HTML. Alla chiusura vengono passati il dizionario degli attributi e l’NSRange della sezione corrente.

Attributed Text nei componenti UI di UIKit

Tutti i principali componenti UI per visualizzare testo in UIKit supportano NSAttributedString tramite la proprietà attributedText. UILabel visualizza testo stilizzato statico, UITextView supporta modifica e link, UITextField accetta attributi separatamente per il placeholder e il testo inserito.

UILabel con attributedText

UILabel è il componente più leggero per visualizzare testo stilizzato. Supporta tutti gli attributi di livello carattere ma non gestisce automaticamente i link cliccabili (per questo serve UITextView). UILabel è ideale per intestazioni, etichette e testi formattati brevi.

UITextView con link

UITextView gestisce NSLinkAttributeName e visualizza i link come elementi interattivi. Per abilitare questa funzionalità, impostare isSelectable = true e isEditable = false. Quando si tocca un link, il delegato riceve la chiamata textView(_:shouldInteractWith:in:interaction:). UITextView supporta anche NSTextAttachment per immagini all’interno del testo.

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

Dopo aver impostato isSelectable e isEditable, l’area di testo si comporta come un blocco di testo statico, ma i link rimangono attivi. UITextViewDelegate controlla il comportamento al tocco.

Integrazione con Core Text

Core Text è un framework di basso livello di Apple per il rendering del testo che lavora direttamente con NSAttributedString. A differenza di UIKit, Core Text non usa NSAttributedString direttamente come oggetto di visualizzazione — invece lo converte in CTFramesetter, poi CTFrame e lo renderizza in un contesto Core Graphics. Questo dà il controllo completo sul layout delle righe e dei glifi.

L’uso di Core Text è giustificato per layout di testo personalizzati: colonne, wrapping di immagini, rotazione del testo, interruzioni di riga non standard. NSMutableParagraphStyle di Core Text include attributi non disponibili in UIKit: kCTParagraphStyleSpecifierMaximumLineSpacing, kCTParagraphStyleSpecifierLineBreakMode con modalità aggiuntive.

Conversione tra UIKit e Core Text

NSAttributedString si trasferisce senza problemi tra UIKit e Core Text, poiché entrambi i framework lavorano con lo stesso tipo. Gli attributi UIKit (NSFontAttributeName, NSForegroundColorAttributeName) sono automaticamente riconosciuti da Core Text e viceversa — gli attributi Core Text (kCTFontAttributeName) sono letti da UIKit. Ciò consente di usare UIKit per attività semplici e Core Text per il rendering personalizzato sullo stesso oggetto NSAttributedString.

Domande frequenti

Qual è la differenza tra NSAttributedString e NSString?

NSString memorizza solo testo senza informazioni di stile. NSAttributedString arricchisce il testo con un dizionario di attributi per ogni intervallo di caratteri. Quando viene passato a UILabel tramite la proprietà text, NSString viene visualizzato come testo semplice. Quando NSAttributedString viene passato tramite attributedText, vengono applicati tutti gli attributi: font diversi, colori e spaziature in un’unica stringa.

Come aggiungere più attributi a un singolo intervallo?

Usa il metodo addAttributes(_:range:) con un dizionario di attributi: addAttributes([.font: font, .foregroundColor: color], range: range). Per aggiungere o modificare un singolo attributo, usa addAttribute(_:value:range:). Il metodo setAttributes sostituisce tutti gli attributi esistenti nell’intervallo con quelli forniti.

Come modificare l’interlinea in NSAttributedString?

Crea un NSMutableParagraphStyle, imposta la proprietà lineSpacing, quindi passalo come valore dell’attributo NSParagraphStyleAttributeName. Per il controllo completo, sono disponibili anche minimumLineHeight, maximumLineHeight, paragraphSpacing, lineBreakMode e alignment. ParagraphStyle è l’unico modo per controllare l’interlinea.

Gli attributi funzionano in SwiftUI?

Sì, SwiftUI supporta NSAttributedString tramite Text(attributedString:) in iOS 15+. Nelle versioni precedenti, usa UIViewRepresentable con UILabel o UITextView. SwiftUI fornisce anche il proprio tipo AttributedString (SwiftUI, non Foundation) per la formattazione dichiarativa con sintassi simile al Markdown.

Come calcolare la dimensione di NSAttributedString?

Usa il metodo boundingRect(with:options:context:), che restituisce il CGRect necessario per visualizzare la stringa con gli attributi specificati. Il parametro options: [.usesLineFragmentOrigin, .usesFontLeading] tiene conto dell’interlinea e delle metriche del font. Per UILabel con un numero limitato di righe, usa sizeThatFits.

Riepilogo

  • NSAttributedString — una classe Foundation per stilizzare il testo tramite dizionari di attributi in iOS
  • Attributi includono font (UIFont), colore (UIColor), sottolineatura, ombra e impostazioni di paragrafo
  • NSMutableAttributedString — una versione dinamica per aggiungere e rimuovere attributi
  • addAttributes(_:range:) applica un dizionario di attributi a un intervallo di caratteri
  • NSParagraphStyle controlla interlinea, allineamento e rientro
  • UILabel, UITextView, UITextField supportano attributedText per visualizzare gli stili
  • Core Text usa lo stesso NSAttributedString per il rendering di basso livello

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto

Leggi anche