Attributed Text: nedir, nitelik türleri ve stil oluşturma

Yazar: IT Sectr Yayınlanma: 2026-07-23 Okuma süresi: 8 dk

Attributed Text, NSAttributedString ve NSMutableAttributedString sınıfları tarafından temsil edilen bir iOS SDK mekanizmasıdır ve tek bir metin dizesinin farklı bölümlerine birden çok stil uygulanmasına olanak tanır. Sıradan bir NSString’ın aksine, Attributed String yalnızca karakterleri değil, her aralık için bir nitelik sözlüğünü de depolar: yazı tipi, renk, satır aralığı, gölge ve hizalama. Apple Developer Documentation’ya göre Attributed String, UILabel, UITextView ve UITextField’de biçimlendirilmiş metin görüntülemenin temelidir. WebKit veya üçüncü taraf kitaplıklar olmadan metin stilize etmenin standart yoludur.

Önemli Noktalar

  • NSAttributedString — iOS’ta nitelik sözlükleri aracılığıyla metin stilize etmek için değiştirilemez bir sınıf
  • Nitelikler yazı tipi, renk, satır aralığı, gölge, alt çizgi ve hizalamayı içerir
  • NSMutableAttributedString — stilleri dinamik olarak uygulamak için değiştirilebilir bir sürüm
  • addAttributes bir aralığa nitelik sözlüğü uygular, addAttribute tek bir nitelik uygular
  • NSAttributedString UILabel, UITextView, UITextField ve Core Text’te kullanılır

iOS’ta Attributed Text Nedir?

NSAttributedString, karakter aralıklarına bağlı adlandırılmış nitelikler kümesine sahip bir diziyi temsil eden Foundation çerçevesi sınıfıdır. Her nitelik bir anahtar-değer çiftidir: anahtar bir sabit (NSFontAttributeName, NSForegroundColorAttributeName) tarafından tanımlanır ve değer karşılık gelen nesnedir (UIFont, UIColor). Nitelikler NSRange aracılığıyla bir karakter aralığına uygulanır.

Sınıf tüm Apple platformlarında mevcuttur: iOS (2.0+), macOS, tvOS, watchOS. NSAttributedString değiştirilemez — bir kez oluşturulduğunda nitelikleri sabittir. Dinamik değişiklikler için, NSAttributedString’den miras alan ve setAttributes, addAttributes, addAttribute, removeAttribute yöntemlerini ekleyen NSMutableAttributedString kullanılır.

NSString’dan Farkı

NSString, stil bilgisi olmayan basit bir karakter dizisidir. text aracılığıyla UILabel’e gönderilen herhangi bir metin, tek bir yazı tipi, renk ve boyutta görüntülenir. attributedText aracılığıyla gönderilen NSAttributedString, her karakterin kendi nitelik kümesine sahip olmasını sağlar. UILabel, UITextView ve UITextField, NSAttributedString’i otomatik olarak tanır ve metni niteliklerine göre işler.

Depolama Biçimi

Dahili olarak, NSAttributedString metinle birlikte bir NSString ve bir nitelik aralıkları dizisi depolar. Her aralık bir NSRange yapısı ve bir nitelik sözlüğü ile temsil edilir. İşleme sırasında sistem aralıkları dolaşır ve her bölüme karşılık gelen nitelikleri uygular. Verimlilik, nitelik değiştirme sayısına bağlıdır — kısa bölümlerde sık değişiklikler işleme süresini artırır.

NSAttributedString Nitelikleri

NSAttributedString nitelikleri, UIKit (iOS) ve AppKit’te (macOS) tanımlanmış sabitlerdir ve her biri metnin görsel stilinin belirli bir yönüyle ilgilidir. Tüm nitelikler NSAttributedString.Key dizeleridir ve değerleri belirli sınıfların nesneleridir. Nitelikler karakter düzeyi (karakterleri etkiler) ve paragraf düzeyi (paragrafları etkiler) olarak ikiye ayrılır.

Karakter düzeyi nitelikleri yazı tipi (NSFontAttributeName), metin rengi (NSForegroundColorAttributeName), arka plan rengi (NSBackgroundColorAttributeName), alt çizgi (NSUnderlineStyleAttributeName), üstü çizili (NSStrikethroughStyleAttributeName), gölge (NSShadowAttributeName) içerir. Paragraf düzeyi nitelikleri, hizalama, girinti, satır aralığı ve sekmeyi kontrol eden NSParagraphStyleAttributeName aracılığıyla ayarlanır.

Bağlantı ve Etkileşim Nitelikleri

NSLinkAttributeName metinde tıklanabilir bir bağlantı oluşturur: değer bir URL veya dizedir. Etkileşim etkinleştirilmişse UITextView bu bağlantıları otomatik olarak işler. NSAttachmentAttributeName, metin içinde satır içi öğe olarak görüntülenen bir NSTextAttachment (görüntü) gömmeye olanak tanır. Bu, bir dize içinde simgeler, emojiler veya özel görünümler içeren metin oluşturmak için kullanılır.

Temel Stil Nitelikleri

Her NSAttributedString niteliğinin sıkı bir şekilde tür belirtilmiş bir değeri vardır. iOS geliştirmede en yaygın kullanılan niteliklere bakalım. Yazı tipi bir UIFont nesnesi aracılığıyla, renk UIColor aracılığıyla, satır aralığı ise tek bir nesnede hizalama, girinti ve boşluk yapılandırmasına izin veren NSMutableParagraphStyle aracılığıyla ayarlanır.

Nitelik AnahtarıDeğer TürüAmaç
NSFontAttributeNameUIFontMetin yazı tipi
NSForegroundColorAttributeNameUIColorMetin rengi
NSBackgroundColorAttributeNameUIColorMetnin arkasındaki arka plan rengi
NSUnderlineStyleAttributeNameNSNumber (Int)Alt çizgi stili
NSParagraphStyleAttributeNameNSParagraphStyleParagraf ayarları
NSKernAttributeNameNSNumber (Float)Harf aralığı (kerning)

NSParagraphStyle

NSParagraphStyle, paragraf nitelikleri için bir kapsayıcıdır: alignment, lineSpacing, paragraphSpacing, firstLineHeadIndent, lineBreakMode, minimumLineHeight ve diğerleri. Bu parametreleri değiştirmek için bir NSMutableParagraphStyle oluşturulur, istenen özellikler ayarlanır ve nesne NSParagraphStyleAttributeName niteliğinin değeri olarak iletilir. Bu, NSAttributedString’de satır aralığını kontrol etmenin tek yoludur.

Gölge ve Efektler

NSShadow metne gölge eklemeye olanak tanır: shadowOffset, shadowBlurRadius, shadowColor parametreleri gölgenin kaymasını, bulanıklığını ve rengini ayarlar. Alt çizgi ve üstü çizili nitelikleri stil kombinasyonlarını kabul eder: NSUnderlineStyle.single, .double, .thick, .patternDash, .patternDot. Çizgi kalınlığı ve rengi üzerinde hassas kontrol için NSUnderlineColorAttributeName ve NSStrikethroughColorAttributeName kullanılır.

Kodda NSAttributedString Kullanımı

Swift’te NSAttributedString oluşturma, metin ve bir nitelik sözlüğü içeren bir başlatıcı aracılığıyla veya adım adım stil uygulamasıyla NSMutableAttributedString aracılığıyla yapılır. Temel yaklaşım, tüm metin için bir nitelik sözlüğü tanımlamak ve ardından belirli aralıklar için nitelikler eklemek veya değiştirmektir.

Tüm Metin İçin Niteliklerle Oluşturma

Basit bir örnek — dizenin tamamı için yazı tipi, renk ve hizalama ayarlamak. Nitelik sözlüğü NSAttributedString başlatıcısına iletilir. Sözlük anahtarları NSAttributedString.Key sabitleridir, değerler karşılık gelen UIKit nesneleridir. Bu, tüm metnin tekdüze biçimlendirildiği temel durumdur.

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

Metin systemFont 16, koyu gri renk, orta hizalama ve 4pt satır aralığıyla görüntülenecektir. Bu yaklaşım statik başlıklar ve düğmeler için kullanışlıdır.

Bir Aralığa Uygulama

NSMutableAttributedString, metnin farklı bölümlerine farklı stiller uygulamaya olanak tanır. addAttribute yöntemi bir aralığa tek bir nitelik ekler, addAttributes bir nitelik sözlüğü ekler. setAttributes yöntemi bir aralığın tüm mevcut niteliklerini yenileriyle değiştirir. Bu, vurgulamalı metin oluşturmak için ana araçtır.

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

“1999” sözcüğü yeşil ve kalın olacak, metnin geri kalanı standart olacaktır. NSRange manuel olarak hesaplanır — özellikle emoji ve bileşik Unicode karakterlerle çalışırken karakter cinsinden uzunluğu doğru saymak önemlidir.

NSMutableAttributedString ile Dinamik Stiller

NSMutableAttributedString, metni ve nitelikleri dinamik olarak değiştirmek için yöntemler sağlar: append, insert, replace, delete, setAttributes, addAttribute, removeAttribute, enumerateAttributes. Bu, farklı kaynaklardan metin oluşturmaya, stilleri birleştirmeye ve arayüz olaylarına yanıt vermeye olanak tanır.

Değiştirilemez NSAttributedString’in aksine, değiştirilebilir sürüm yeni bir nesne oluşturmadan içeriği değiştirmeyi destekler. Bu, kullanıcının metni düzenleyebildiği ve stillerin korunması gereken metin düzenleyiciler, sohbetler ve formlar için kritiktir.

Sohbette Stilleri Birleştirme

Mesajlaşma uygulamalarında, her mesaj kullanıcı adı (kalın), mesaj metni (normal), saat (gri renk) içerir. NSMutableAttributedString, ilgili niteliklerle birlikte parçaları istenen sırada ekleyerek böyle bir diziyi tek seferde oluşturmaya olanak tanır.

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

Sonuç, üç stillendirilmiş bölüme sahip tek bir dizidir. Append otomatik olarak NSRange’i hesaplar, konumların manuel olarak hesaplanması gerekmez. Bu yaklaşım herhangi bir sayıda parçaya ölçeklenebilir.

Nitelikleri Numaralandırma

enumerateAttributes(in:options:using:) yöntemi, belirtilen aralıktaki tüm nitelik aralıklarını dolaşır. Bu, biçimlendirme analizi için kullanışlıdır: tüm bağlantıları bulma, belirli niteliklerin rengini değiştirme veya metni HTML’ye çıkarma. Closure’a geçerli bölümün nitelik sözlüğü ve NSRange’i iletilir.

UIKit UI Bileşenlerinde Attributed Text

UIKit’te metin görüntülemek için tüm ana UI bileşenleri, attributedText özelliği aracılığıyla NSAttributedString’i destekler. UILabel statik stillendirilmiş metin görüntüler, UITextView düzenleme ve bağlantıları destekler, UITextField yer tutucu ve girilen metin için ayrı ayrı nitelikleri kabul eder.

attributedText ile UILabel

UILabel, stillendirilmiş metin görüntülemek için en hafif bileşendir. Tüm karakter düzeyi niteliklerini destekler ancak tıklanabilir bağlantıları otomatik olarak işlemez (bunun için UITextView gerekir). UILabel başlıklar, etiketler ve kısa biçimlendirilmiş metinler için idealdir.

Bağlantılarla UITextView

UITextView, NSLinkAttributeName’i işler ve bağlantıları etkileşimli öğeler olarak görüntüler. Bu işlevselliği etkinleştirmek için isSelectable = true ve isEditable = false olarak ayarlayın. Bir bağlantıya tıklandığında, temsilci textView(_:shouldInteractWith:in:interaction:) çağrısını alır. UITextView ayrıca metin içindeki görseller için NSTextAttachment’ı da destekler.

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

isSelectable ve isEditable ayarlandıktan sonra metin alanı statik bir metin bloğu gibi davranır ancak bağlantılar etkin kalır. UITextViewDelegate, tıklamadaki davranışı kontrol eder.

Core Text ile Entegrasyon

Core Text, doğrudan NSAttributedString ile çalışan Apple’ın düşük seviyeli metin işleme çerçevesidir. UIKit’in aksine, Core Text NSAttributedString’i doğrudan bir görüntüleme nesnesi olarak kullanmaz — bunun yerine onu CTFramesetter’a, ardından CTFrame’e dönüştürür ve bir Core Graphics bağlamında işler. Bu, satır düzeni ve glifler üzerinde tam kontrol sağlar.

Core Text kullanımı, özel metin düzenleri için uygundur: sütunlar, görsel sarma, metin döndürme, standart olmayan satır sonları. Core Text’in NSMutableParagraphStyle’ı, UIKit’te bulunmayan nitelikleri içerir: kCTParagraphStyleSpecifierMaximumLineSpacing, kCTParagraphStyleSpecifierLineBreakMode ek modlarla.

UIKit ve Core Text Arasında Dönüşüm

NSAttributedString, UIKit ve Core Text arasında sorunsuz bir şekilde aktarılır, çünkü her iki çerçeve de aynı türle çalışır. UIKit nitelikleri (NSFontAttributeName, NSForegroundColorAttributeName) Core Text tarafından otomatik olarak tanınır ve bunun tersi de geçerlidir — Core Text nitelikleri (kCTFontAttributeName) UIKit tarafından okunur. Bu, aynı NSAttributedString nesnesinde basit görevler için UIKit’i ve özel işleme için Core Text’i kullanmaya olanak tanır.

Sıkça Sorulan Sorular

NSAttributedString, NSString’dan nasıl farklıdır?

NSString yalnızca stil bilgisi olmadan metin depolar. NSAttributedString, her karakter aralığı için bir nitelik sözlüğüyle metni tamamlar. text özelliği aracılığıyla UILabel’e iletildiğinde, NSString düz metin olarak görüntülenir. NSAttributedString attributedText aracılığıyla iletildiğinde, tüm nitelikler uygulanır: tek bir dizide farklı yazı tipleri, renkler ve aralıklar.

Tek bir aralığa birden çok nitelik nasıl eklenir?

Bir nitelik sözlüğüyle addAttributes(_:range:) yöntemini kullanın: addAttributes([.font: font, .foregroundColor: color], range: range). Tek bir nitelik eklemek veya değiştirmek için addAttribute(_:value:range:) kullanın. setAttributes yöntemi, aralıktaki tüm mevcut nitelikleri sağlanan niteliklerle değiştirir.

NSAttributedString’de satır aralığı nasıl değiştirilir?

Bir NSMutableParagraphStyle oluşturun, lineSpacing özelliğini ayarlayın, ardından bunu NSParagraphStyleAttributeName niteliğinin değeri olarak iletin. Tam kontrol için minimumLineHeight, maximumLineHeight, paragraphSpacing, lineBreakMode ve alignment da mevcuttur. ParagraphStyle, satır aralığını kontrol etmenin tek yoludur.

Nitelikler SwiftUI’da çalışır mı?

Evet, SwiftUI iOS 15+ sürümünde Text(attributedString:) aracılığıyla NSAttributedString’i destekler. Eski sürümlerde UILabel veya UITextView ile UIViewRepresentable kullanın. SwiftUI ayrıca Markdown benzeri sözdizimiyle bildirimsel biçimlendirme için kendi AttributedString türünü (Foundation değil, SwiftUI) sağlar.

NSAttributedString’in boyutu nasıl hesaplanır?

boundingRect(with:options:context:) yöntemini kullanın; bu yöntem, verilen niteliklerle diziyi görüntülemek için gereken CGRect’i döndürür. options parametresi: [.usesLineFragmentOrigin, .usesFontLeading] satır aralığını ve yazı tipi metriklerini hesaba katar. Sınırlı satır sayısına sahip UILabel için sizeThatFits kullanın.

Özet

  • NSAttributedString — iOS’ta nitelik sözlükleri aracılığıyla metin stilize etmek için bir Foundation sınıfı
  • Nitelikler yazı tipi (UIFont), renk (UIColor), alt çizgi, gölge ve paragraf ayarlarını içerir
  • NSMutableAttributedString — nitelik ekleme ve kaldırma için dinamik bir sürüm
  • addAttributes(_:range:) bir karakter aralığına nitelik sözlüğü uygular
  • NSParagraphStyle satır aralığını, hizalamayı ve girintiyi kontrol eder
  • UILabel, UITextView, UITextField stilleri görüntülemek için attributedText’i destekler
  • Core Text düşük seviyeli işleme için aynı NSAttributedString’i kullanır

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun