Attributed Text: nima, atribut turlari va stillashtirish

Muallif: IT Sectr Nashr etilgan: 2026-07-23 O'qish vaqti: 8 daq

Attributed Text — bu iOS SDK mexanizmi bo'lib, NSAttributedString va NSMutableAttributedString sinflari orqali taqdim etiladi va bitta matn qatorining turli qismlariga bir nechta stillarni qo'llash imkonini beradi. Oddiy NSString-dan farqli o'laroq, Attributed String nafaqat belgilarni, balki har bir diapazon uchun atributlar lug'atini ham saqlaydi: shrift, rang, qatorlararo bo'shliq, soya va tekislash. Apple Developer Documentation ga ko'ra, Attributed String UILabel, UITextView va UITextField da formatlangan matnni ko'rsatish uchun asos hisoblanadi. Bu WebKit yoki uchinchi tomon kutubxonalarisiz matnni stillashtirishning standart usulidir.

Asosiy ma'lumotlar

  • NSAttributedString — iOS-da atributlar lug'atlari orqali matnni stillashtirish uchun o'zgarmas sinf
  • Atributlar shrift, rang, qatorlararo bo'shliq, soya, tagiga chizish va tekislashni o'z ichiga oladi
  • NSMutableAttributedString — stillarni dinamik qo'llash uchun o'zgaruvchan versiya
  • addAttributes atributlar lug'atini diapazonga qo'llaydi, addAttribute — bitta atribut
  • NSAttributedString UILabel, UITextView, UITextField va Core Text da ishlatiladi

iOS-da Attributed Text nima?

NSAttributedString — bu Foundation framework sinfi bo'lib, belgilar diapazonlariga bog'langan nomlangan atributlar to'plami bilan qatorni ifodalaydi. Har bir atribut kalit-qiymat juftligidir: kalit doimiy bilan belgilanadi (NSFontAttributeName, NSForegroundColorAttributeName), qiymat esa tegishli obyekt bilan (UIFont, UIColor). Atributlar NSRange orqali belgilar diapazoniga qo'llaniladi.

Sinf barcha Apple platformalarida mavjud: iOS (2.0+), macOS, tvOS, watchOS. NSAttributedString o'zgarmasdir — yaratilgandan so'ng, uning atributlari qat'iy. Dinamik o'zgartirish uchun NSAttributedString dan meros oladigan va setAttributes, addAttributes, addAttribute, removeAttribute metodlarini qo'shadigan NSMutableAttributedString ishlatiladi.

NSString dan farqi

NSString — stillashtirish ma'lumotisiz oddiy belgilar qatori. UILabel ga text orqali uzatilgan har qanday matn bitta shrift, rang va o'lchamda ko'rsatiladi. attributedText orqali uzatilgan NSAttributedString har bir belgiga o'z atributlar to'plamiga ega bo'lish imkonini beradi. UILabel, UITextView va UITextField avtomatik ravishda NSAttributedString ni taniydi va matnni atributlarga muvofiq ko'rsatadi.

Saqlash formati

Ichki jihatdan NSAttributedString matn bilan NSString va atribut diapazonlari massivini saqlaydi. Har bir diapazon NSRange strukturasi va atributlar lug'ati bilan ifodalanadi. Ko'rsatishda tizim diapazonlar bo'ylab o'tadi va har bir qismga tegishli atributlarni qo'llaydi. Samaradorlik atribut almashishlar soniga bog'liq — qisqa qismlarda tez-tez o'zgarish ko'rsatish vaqtini oshiradi.

NSAttributedString atributlari

NSAttributedString atributlari — UIKit (iOS) va AppKit (macOS) da belgilangan doimiylar bo'lib, ularning har biri matnning vizual formatlashining ma'lum bir jihatiga mos keladi. Barcha atributlar NSAttributedString.Key satrlari bo'lib, ularning qiymatlari ma'lum sinflarning obyektlaridir. Atributlar belgi (belgilarga ta'sir qiladi) va paragraf (paragraflarga ta'sir qiladi) ga bo'linadi.

Belgi atributlariga shrift (NSFontAttributeName), matn rangi (NSForegroundColorAttributeName), fon rangi (NSBackgroundColorAttributeName), tagiga chizish (NSUnderlineStyleAttributeName), ustidan chizish (NSStrikethroughStyleAttributeName), soya (NSShadowAttributeName) kiradi. Paragraf atributlari NSParagraphStyleAttributeName orqali o'rnatiladi va tekislash, chekinishlar, qatorlararo bo'shliq va tabulyatsiyani boshqaradi.

Link va interaktivlik atributlari

NSLinkAttributeName matnda bosiladigan link yaratadi: qiymat URL yoki satr. UITextView interaktivlik yoqilgan bo'lsa, bunday linklarni avtomatik qayta ishlaydi. NSAttachmentAttributeName matn ichida NSTextAttachment — inline element sifatida ko'rsatiladigan tasvirni joylashtirish imkonini beradi. Bu qator ichida belgilar, emoji yoki maxsus ko'rinishlar bilan matn yaratish uchun ishlatiladi.

Asosiy stillashtirish atributlari

Har bir NSAttributedString atributi qat'iy tiplangan qiymatga ega. iOS rivojlanishida eng ko'p ishlatiladigan atributlarni ko'rib chiqaylik. Shrift UIFont obyekti bilan, rang UIColor bilan, qatorlararo bo'shliq esa tekislash, chekinishlar va bo'shliqlarni bitta obyektda sozlash imkonini beradigan NSMutableParagraphStyle orqali o'rnatiladi.

Atribut kalitiQiymat turiMaqsad
NSFontAttributeNameUIFontMatn shrifti
NSForegroundColorAttributeNameUIColorMatn rangi
NSBackgroundColorAttributeNameUIColorMatn ostidagi fon rangi
NSUnderlineStyleAttributeNameNSNumber (Int)Tagiga chizish stili
NSParagraphStyleAttributeNameNSParagraphStyleParagraf sozlamalari
NSKernAttributeNameNSNumber (Float)Harflararo bo'shliq

NSParagraphStyle

NSParagraphStyle — paragraf atributlari uchun konteyner: alignment, lineSpacing, paragraphSpacing, firstLineHeadIndent, lineBreakMode, minimumLineHeight va boshqalar. Bu parametrlarni o'zgartirish uchun NSMutableParagraphStyle yaratiladi, kerakli xususiyatlar sozlanadi va obyekt NSParagraphStyleAttributeName atributining qiymati sifatida uzatiladi. Bu NSAttributedString da qatorlararo bo'shliqni boshqarishning yagona usulidir.

Soya va effektlar

NSShadow matnga soya qo'shish imkonini beradi: shadowOffset, shadowBlurRadius, shadowColor parametrlari soyaning siljishi, xiraligi va rangini belgilaydi. Tagiga va ustidan chizish atributlari stillarning kombinatsiyalarini qabul qiladi: NSUnderlineStyle.single, .double, .thick, .patternDash, .patternDot. Chiziqlarning qalinligi va rangini aniq boshqarish uchun NSUnderlineColorAttributeName va NSStrikethroughColorAttributeName ishlatiladi.

Kodda NSAttributedString dan qanday foydalanish

Swift da NSAttributedString yaratish matn va atributlar lug'ati bilan initilizator orqali yoki NSMutableAttributedString bilan bosqichma-bosqich stillarni qo'llash orqali amalga oshiriladi. Asosiy yondashuv — butun matn uchun atributlar lug'atini belgilash, keyin alohida diapazonlar uchun atributlar qo'shish yoki o'zgartirish.

Butun matn uchun atributlar bilan yaratish

Oddiy misol — butun qator uchun shrift, rang va tekislashni o'rnatish. Atributlar lug'ati NSAttributedString initilizatoriga uzatiladi. Lug'at kalitlari NSAttributedString.Key doimiylari, qiymatlar tegishli UIKit obyektlaridir. Bu butun matn bir xil formatlanganda asosiy variantdir.

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

Matn systemFont 16 shrifti, to'q kulrang rang, markazga tekislash va 4pt qatorlararo bo'shliq bilan ko'rsatiladi. Bu yondashuv statik sarlavhalar va tugmalar uchun qulay.

Diapazonga qo'llash

NSMutableAttributedString matnning turli qismlariga turli stillarni qo'llash imkonini beradi. addAttribute metodi diapazonga bitta atribut qo'shadi, addAttributes — atributlar lug'ati. setAttributes metodi diapazonning barcha atributlarini yangilari bilan almashtiradi. Bu urg'u bilan matn yaratish uchun asosiy vositadir.

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” so'zi yashil va qalin bo'ladi, qolgan matn — standart. NSRange qo'lda hisoblanadi — belgilarda uzunlikni to'g'ri sanash muhim, ayniqsa emoji va murakkab Unicode belgilari bilan ishlashda.

NSMutableAttributedString bilan dinamik stillar

NSMutableAttributedString matn va atributlarni dinamik o'zgartirish uchun metodlarni taqdim etadi: append, insert, replace, delete, setAttributes, addAttribute, removeAttribute, enumerateAttributes. Bu turli manbalardan matn qurish, stillarni birlashtirish va interfeys hodisalariga reaksiya berish imkonini beradi.

O'zgarmas NSAttributedString dan farqli o'laroq, mutable versiyasi yangi obyekt yaratmasdan mazmunni o'zgartirishni qo'llab-quvvatlaydi. Bu matn muharrirlari, chatlar va formalar uchun muhim, bu erda foydalanuvchi matnni tahrirlashi mumkin va stillar saqlanishi kerak.

Chatda stillarni birlashtirish

Messenger ilovalarida har bir xabar foydalanuvchi nomi (qalin shrift), xabar matni (oddiy), vaqt (kulrang rang) ni o'z ichiga oladi. NSMutableAttributedString bunday qatorni bir martada qurish, qismlarni tegishli atributlar bilan kerakli tartibda qo'shish imkonini beradi.

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

Natija — uch stilli qismga ega bitta qator. Append avtomatik ravishda NSRange ni to'g'ri hisoblaydi, pozitsiyalarni qo'lda hisoblash shart emas. Bu yondashuv istalgan miqdordagi fragmentlar uchun masshtablanadi.

Atributlar bo'ylab iteratsiya

enumerateAttributes(in:options:using:) metodi belgilangan intervaldagi barcha atribut diapazonlari bo'ylab o'tadi. Bu formatlashni tahlil qilish uchun foydali: barcha linklarni topish, ma'lum atributlarning rangini o'zgartirish yoki matnni HTML ga eksport qilish. Yopilishda atributlar lug'ati va joriy qismning NSRange i uzatiladi.

UIKit komponentlarida Attributed Text

UIKit da matn ko'rsatish uchun barcha asosiy UI komponentlari attributedText xususiyati orqali NSAttributedString ni qo'llab-quvvatlaydi. UILabel statik stillashtirilgan matnni ko'rsatadi, UITextView tahrirlash va linklarni qo'llab-quvvatlaydi, UITextField placeholder va kiritilgan matn uchun alohida atributlarni qabul qiladi.

UILabel attributedText bilan

UILabel — stillashtirilgan matnni ko'rsatish uchun eng engil komponent. Barcha belgi atributlarini qo'llab-quvvatlaydi, lekin bosiladigan linklarni avtomatik qayta ishlamaydi (buning uchun UITextView kerak). UILabel sarlavhalar, yorliqlar va formatlash bilan qisqa matnlar uchun idealdir.

Linklar bilan UITextView

UITextView NSLinkAttributeName ni qayta ishlaydi va linklarni interaktiv elementlar sifatida ko'rsatadi. Bu funksiyani yoqish uchun isSelectable = true va isEditable = false ni o'rnating. Link bosilganda, delegate textView(_:shouldInteractWith:in:interaction:) chaqiruvini oladi. UITextView shuningdek matn ichidagi tasvirlar uchun NSTextAttachment ni qo'llab-quvvatlaydi.

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 va isEditable sozlangandan so'ng, matn maydoni statik matn bloki kabi harakat qiladi, lekin linklar faol qoladi. UITextViewDelegate delegate bosishdagi xatti-harakatni boshqaradi.

Core Text bilan integratsiya

Core Text — bu Apple-ning to'g'ridan-to'g'ri NSAttributedString bilan ishlaydigan past darajali matn renderlash frameworkidir. UIKit dan farqli o'laroq, Core Text NSAttributedString ni to'g'ridan-to'g'ri ko'rsatiladigan obyekt sifatida ishlatmaydi, balki uni CTFramesetter ga, keyin CTFrame ga aylantiradi va Core Graphics kontekstida ko'rsatadi. Bu qatorlar va gliflarning joylashuvi ustidan to'liq nazorat beradi.

Core Text dan foydalanish maxsus matn layoutlari uchun asoslanadi: ustunlar, tasvirlar atrofida oqish, matnni aylantirish, nostandart qator uzilishlari. Core Text ning NSMutableParagraphStyle i UIKit da mavjud bo'lmagan atributlarni o'z ichiga oladi: kCTParagraphStyleSpecifierMaximumLineSpacing, kCTParagraphStyleSpecifierLineBreakMode qo'shimcha rejimlar bilan.

UIKit va Core Text o'rtasida konvertatsiya

NSAttributedString UIKit va Core Text o'rtasida muammosiz uzatiladi, chunki ikkala framework bir xil tur bilan ishlaydi. UIKit atributlari (NSFontAttributeName, NSForegroundColorAttributeName) Core Text tomonidan avtomatik tan olinadi va aksincha — Core Text atributlari (kCTFontAttributeName) UIKit tomonidan o'qiladi. Bu bir xil NSAttributedString obyektida oddiy vazifalar uchun UIKit dan va maxsus renderlash uchun Core Text dan foydalanish imkonini beradi.

Tez-tez beriladigan savollar

NSAttributedString NSString dan nimasi bilan farq qiladi?

NSString stillashtirish ma'lumotisiz faqat matnni saqlaydi. NSAttributedString matnni har bir belgi diapazoni uchun atributlar lug'ati bilan to'ldiradi. UILabel ga text xususiyati orqali uzatilganda NSString oddiy matn sifatida ko'rsatiladi. NSAttributedString attributedText xususiyati orqali uzatilganda barcha atributlar qo'llaniladi: bitta qatorda turli shriftlar, ranglar va bo'shliqlar.

Bitta diapazonga bir nechta atributni qanday qo'shish kerak?

addAttributes(_:range:) metodidan atributlar lug'ati bilan foydalaning: addAttributes([.font: font, .foregroundColor: color], range: range). Bitta atribut qo'shish yoki o'zgartirish uchun addAttribute(_:value:range:) dan foydalaning. setAttributes metodi diapazondagi barcha mavjud atributlarni yangilari bilan almashtiradi.

NSAttributedString da qatorlararo bo'shliqni qanday o'zgartirish kerak?

NSMutableParagraphStyle yarating, lineSpacing xususiyatini o'rnating, so'ng uni NSParagraphStyleAttributeName atributining qiymati sifatida uzating. To'liq nazorat uchun minimumLineHeight, maximumLineHeight, paragraphSpacing, lineBreakMode va alignment ham mavjud. ParagraphStyle qatorlararo bo'shliqni boshqarishning yagona usulidir.

Atributlar SwiftUI da ishlaydimi?

Ha, SwiftUI iOS 15+ da Text(attributedString:) orqali NSAttributedString ni qo'llab-quvvatlaydi. Eski versiyalarda UILabel yoki UITextView bilan UIViewRepresentable dan foydalaning. SwiftUI shuningdek Markdown o'xshash sintaksis bilan deklarativ formatlash uchun o'zining AttributedString (SwiftUI, Foundation emas) turini taqdim etadi.

NSAttributedString ning o'lchamini qanday hisoblash mumkin?

boundingRect(with:options:context:) metodidan foydalaning, u berilgan atributlar bilan qatorni ko'rsatish uchun zarur bo'lgan CGRect ni qaytaradi. options: [.usesLineFragmentOrigin, .usesFontLeading] parametri qatorlararo bo'shliqlar va shrift metrikalarini hisobga oladi. Cheklangan qatorlar soniga ega UILabel uchun sizeThatFits dan foydalaning.

Xulosa

  • NSAttributedString — iOS-da atributlar lug'atlari orqali matnni stillashtirish uchun Foundation sinfi
  • Atributlar shrift (UIFont), rang (UIColor), tagiga chizish, soya va paragraf sozlamalarini o'z ichiga oladi
  • NSMutableAttributedString — atributlarni qo'shish va o'chirish bilan dinamik versiya
  • addAttributes(_:range:) atributlar lug'atini belgilar diapazoniga qo'llaydi
  • NSParagraphStyle qatorlararo bo'shliq, tekislash va chekinishlarni boshqaradi
  • UILabel, UITextView, UITextField stillarni ko'rsatish uchun attributedText ni qo'llab-quvvatlaydi
  • Core Text past darajali renderlash uchun bir xil NSAttributedString dan foydalanadi

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing