iOS 富文本屬性NSMutableAttributedString使用詳解

前言:

? ? ? ? 在iOS中,顯示一段字符串通常會使用UILabel,但是它對文字的展現方式比較單一,有的時候需要展示一些特殊的形式,此時NSMutableAttributedString可以很好地滿足使用要求。它一共提供了21方法可以選擇使用,下面我將一一介紹。

一:屬性介紹

1:NSParagraphStyleAttributeName 段落排版

? ? ? ?設置文本段落排版格式,取值為 NSParagraphStyle 對象,該屬性在一段文本上應用多個屬性。如果不指定該屬性,則默認為 NSParagraphStyle 的defaultParagraphStyle 方法返回的默認段落屬性。

NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];

style.firstLineHeadIndent = 20;?

style.lineSpacing = 20;

style.alignment = NSTextAlignmentCenter;

2:NSFontAttributeName 字體屬性

? ? ? 該屬性所對應的值是一個 UIFont 對象。該屬性用于改變一段文本的字體。如果不指定該屬性,則默認為12-point Helvetica(Neue)。

3:NSForegroundColorAttributeNam? 字體顏色

? ? ? ?該屬性所對應的值是一個 UIColor 對象。該屬性用于指定一段文本的字體顏色。如果不指定該屬性,則默認為黑色。

? ? ? ?NSForegroundColorAttributeName 設置的顏色與 UILabel 的 textColor 屬性設置的顏色在地位上是相等的,與 NSBackgroundColorAttributeName 地位上也相等,誰最后賦值,最終顯示的就是誰的顏色,但是textColor屬性可以與 NSBackgroundColorAttributeName 屬性可疊加。

4:NSBackgroundColorAttributeName? 字體所在區域背景顏色

? ? ? 該屬性所對應的值是一個 UIColor 對象。該屬性用于指定一段文本的背景顏色。如果不指定該屬性, 默認值為nil, 透明色

5:NSLigatureAttributeName? 連體屬性

? ? ? ? 該屬性所對應的值是一個 NSNumber 對象(整數)。連體字符是指某些連在一起的字符,它們采用單個的圖元符號。0 表示沒有連體字符。1 表示使用默認的連體字符。2表示使用所有連體符號。默認值為 1(注意,iOS 不支持值為 2)。一般中文用不到,在英文中可能出現相鄰字母連筆的情況

6:NSKernAttributeName? 字符間距

取值為 NSNumber 對象(整數),正值間距加寬,負值間距變窄,值為浮點數,字距屬性,默認值為0

7:NSStrikethroughStyleAttributeName? 刪除線

設置刪除線,取值為 NSNumber 對象(整數),枚舉默認值是NSUnderlineStyleNone。

NSUnderlineStyleNone 不設置刪除線

NSUnderlineStyleSingle 設置刪除線為細單實線

NSUnderlineStyleThick 設置刪除線為粗單實線

NSUnderlineStyleDouble 設置刪除線為細雙實線

8:NSStrikethroughColorAttributeName? 刪除線顏色

取值為 UIColor 對象,默認值為黑色,

9:NSUnderlineStyleAttributeName 下劃線

取值為 NSNumber 對象(整數),枚舉常量 NSUnderlineStyle中的值,與刪除線類似,該值指定是否在文字上加上下劃線,下劃線除了線條位置和刪除線不同外,其他的都可以完全參照刪除線設置

10:NSUnderlineColorAttributeName 下劃線顏色

設置下劃線顏色,取值為 UIColor 對象,默認值為黑色

11:NSStrokeWidthAttributeName? 筆畫寬度

? ? ? 值為浮點數NSNumber,該值改變筆畫寬度(相對于字體 size 的百分比)設置筆畫的粗細,負值填充效果,正值中空效果,正數只改變描邊寬度,負數同時改變文字的描邊和填充寬度,默認為 0,即不改變。

12:NSStrokeColorAttributeName 填充部分顏色

填充部分顏色,不是字體顏色,取值為 UIColor 對象,

13:NSShadowAttributeName? 陰影屬性

取值為 NSShadow 對象,默認為 nil。

NSShadow *shadow=[[NSShadow alloc] init];

shadow.shadowBlurRadius=5;//模糊度

shadow.shadowColor=[UIColor yellowColor];

shadow.shadowOffset=CGSizeMake(1, 3);

14:NSObliquenessAttributeName? 字形傾斜度

取值為 NSNumber (float),正值右傾,負值左傾,默認值為0,表示沒有傾斜,

15:NSExpansionAttributeName? 橫向拉伸屬性,

取值為 NSNumber (float),正值橫向拉伸文本,負值橫向壓縮文本

16:NSVerticalGlyphFormAttributeName 文字排版方向

取值為 NSNumber 對象(整數),0 表示橫排文本,1 表示豎排文本,在iOS中, 總是以橫向排版,0 以外的值都未定義。

17:NSTextEffectAttributeName 文本特殊效果

這個屬性的值是一個NSString對象。使用此屬性指定的文字效果,如NSTextEffectLetterpressStyle。此屬性的默認值為nil,表示沒有文本效應。

18:NSBaselineOffsetAttributeName? 基線偏移值

取值為 NSNumber (float),表示的字符從基線偏移的NSNumber對象,默認值是0,正值上偏,負值下偏。

19:NSWritingDirectionAttributeName? 文字書寫方向

? ? ? ? 取值為包含NSNumber對象的數組. 從左向右書寫或者從右向左書寫。

The values of the NSNumber objects should be 0, 1, 2, or 3, for LRE, RLE, LRO, or RLO respectively, and combinations of NSWritingDirectionLeftToRight and NSWritingDirectionRightToLeft with NSTextWritingDirectionEmbedding or NSTextWritingDirectionOverride, as shown in Values of NSWritingDirectionAttributeName and equivalent markup.

[attributedString addAttribute:NSWritingDirectionAttributeName value:@[@3]? range:NSMakeRange(40, 4)];

20:NSLinkAttributeName ?鏈接屬性

點擊后調用瀏覽器打開指定URL地址,此屬性的值是NSURL對象(首選)或一個NSString對象,此屬性的默認值為nil,表示沒有鏈接,UILabel無法使用該屬性, 可以使用UITextView 控件。


21:NSAttachmentAttributeName? 文本附件

? ? ? 取值為NSTextAttachment對象,常用于文字圖片混排,此屬性的默認值為nil,表示無附件。

使用:

//創建NSTextAttachment的對象,用來裝載圖片

NSTextAttachment *attch = [[NSTextAttachment alloc] init];

//將NSTextAttachment對象的image屬性設置為想要使用的圖片

attch.image = [UIImage imageNamed:@"lock_wallpaper.jpeg"];

//設置NSTextAttachment對象bounds大小,也就是要顯示的圖片的大小

attch.bounds = CGRectMake(0, 0, 50, 50);

// 創建帶有圖片的富文本

NSAttributedString *string = [NSAttributedString attributedStringWithAttachment:attch];

//插入文本指定位置

[attributedString insertAttributedString:string atIndex:7];

//插入文本末尾

[attributedString appendAttributedString:string];


二:效果展示

? ? ? 了解完上面的屬性介紹,看一下實際的效果



三:實現代碼:

- (void)viewDidLoad {

[super viewDidLoad];

self.lable.numberOfLines = 0; ? ? ? //自動換行

//創建一個NSMutableAttributedString富文本對象

NSMutableAttributedString *attributedString=[[NSMutableAttributedString alloc] initWithString:@"愿你有好運氣,如果沒有,愿你在不幸中學會慈悲。愿你被很多人愛,如果沒有,愿你在寂寞中學會寬容。愿你一生一世每天都可以睡到自然醒。"];

[attributedString addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:40.0] range:NSMakeRange(0, 2)]; ? ?//設置字體屬性 大小

[attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(2, 2)]; ? ? //設置字體顏色

[attributedString addAttribute:NSBackgroundColorAttributeName value:[UIColor blueColor] range:NSMakeRange(4, 2)]; ? //設置字體所在區域背景顏色

[attributedString addAttribute: NSLigatureAttributeName value:@(1) range:NSMakeRange(7, 2)];? ? //設置連體屬性

[attributedString addAttribute: NSKernAttributeName? value:@(10) range:NSMakeRange(7, 2)];? //設定字符間距

[attributedString addAttribute:NSStrikethroughStyleAttributeName? value:@(NSUnderlineStyleThick) range:NSMakeRange(9, 2)];? //設置刪除線

[attributedString addAttribute: NSStrikethroughColorAttributeName? value:[UIColor redColor] range:NSMakeRange(9, 2)];? //設置刪除線顏色

[attributedString addAttribute: NSUnderlineStyleAttributeName? value:@(NSUnderlineStyleThick) range:NSMakeRange(12, 2)];? //設置下劃線

[attributedString addAttribute: NSUnderlineColorAttributeName? value:[UIColor redColor] range:NSMakeRange(12, 2)];? //設置下劃線顏色

[attributedString addAttribute:NSStrokeWidthAttributeName value:@(-5) range:NSMakeRange(14, 2)];? //設置筆畫寬度? //填充字

[attributedString addAttribute:NSStrokeWidthAttributeName value:@(2) range:NSMakeRange(16, 2)];//設置筆畫寬度? //空心字

[attributedString addAttribute:NSStrokeColorAttributeName value:[UIColor greenColor] range:NSMakeRange(14, 4)];? //填充部分顏色

//設置陰影屬性

NSShadow *shadow=[[NSShadow alloc] init];

shadow.shadowBlurRadius=5;//模糊度

shadow.shadowColor=[UIColor yellowColor];

shadow.shadowOffset=CGSizeMake(1, 3);

[attributedString addAttribute:NSShadowAttributeName value:shadow range:NSMakeRange(18, 4)];

[attributedString addAttribute:NSObliquenessAttributeName value:@(1) range:NSMakeRange(23, 2)];? ? //設置字形傾斜度,

[attributedString addAttribute:NSExpansionAttributeName value:@(0.5) range:NSMakeRange(25, 4)];? ? //設置文本橫向拉伸屬性,

[attributedString addAttribute:NSVerticalGlyphFormAttributeName value:@(1) range:NSMakeRange(18, 4)];? //設置文字排版方向,

[attributedString addAttribute:NSTextEffectAttributeName value:NSTextEffectLetterpressStyle range:NSMakeRange(31, 4)];? //設置文本特殊效果,目前只有圖版印刷效果可用:

[attributedString addAttribute:NSBaselineOffsetAttributeName value:@(-6) range:NSMakeRange(36, 4)]; //設置基線偏移值,

[attributedString addAttribute:NSWritingDirectionAttributeName value:@[@3]? range:NSMakeRange(40, 4)];? //設置文字書寫方向,

//設置鏈接屬性, UILabel無法使用該屬性, 可以使用UITextView 控件.

NSURL *url=[NSURL URLWithString:@"www.baidu.com"];

[attributedString addAttribute: NSLinkAttributeName? value:url? range:NSMakeRange(44, 2)];

//NSAttachmentAttributeName 設置文本附件,常用于文字圖片混排

NSTextAttachment *attch = [[NSTextAttachment alloc] init];? //創建NSTextAttachment的對象,用來裝載圖片

attch.image = [UIImage imageNamed:@"lock_wallpaper.jpeg"];? //將NSTextAttachment對象的image屬性設置為想要使用的圖片

attch.bounds = CGRectMake(0, 0, 50, 50);? //設置NSTextAttachment對象bounds大小,也就是要顯示的圖片的大小

NSAttributedString *string = [NSAttributedString attributedStringWithAttachment:attch];? // 創建帶有圖片的富文本

[attributedString insertAttributedString:string atIndex:7]; ? //圖片插入指定位置

[attributedString appendAttributedString:string];? ? //插入末尾

//設置文本段落排版格式,

NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];

style.firstLineHeadIndent = 20;

style.lineSpacing = 20;

style.alignment = NSTextAlignmentCenter;

[attributedString addAttribute:NSParagraphStyleAttributeName value:style? range:NSMakeRange(0, attributedString.length)];

self.lable.attributedText=attributedString;//設置控件的富文本對象

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,406評論 6 538
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,034評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,413評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,449評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,165評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,559評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,606評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,781評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,327評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,084評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,278評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,849評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,495評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,927評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,172評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,010評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,241評論 2 375

推薦閱讀更多精彩內容