iOS之富文本

使用UITextView顯示一段電影的簡介,因爲字數比較多,因此字體設置的很小,行間距和段間距也很小,一大段文字擠在一塊兒看起來很彆扭,想要把行間距調大,結果在XCode中查遍其全部屬性才發現,UITextView竟然沒有調整行間距的接口,因而忍住不內心抱怨了一下下。瀏覽器

 

       可是問題仍是要解決的,上網一查才發現,iOS不只有富文本處理的功能,並且對於文字排版的處理能力那是至關的強大,看來我是孤陋寡聞了。app

 

 

正題開始以前插播一點基礎知識:框架

 

 

在iOS中或者Mac OS X中怎樣才能將一個字符串繪製到屏幕上呢?佈局

 

 

       簡單來講,是經過控件來完成的,而這些控件都封裝在UIKit框架中(對於Mac OS X是AppKit框架),在UIKit中經常使用來在屏幕上顯示字符串的控件有3個:性能

 

        UILabel學習

 

        UITextField字體

 

        UITextViewspa

 

       然而這些控件自己對文本的展示方式很單一,一般僅僅可以控制字體樣式、大小、顏色、加粗、斜體等等,而對於行距控制,字距控制,段落控制等高級功能卻無能爲力。orm

 

       此時難免要提起一個很是強大的文本排版框架CoreText.framework。對象

       CoreText框架是基於 iOS 3.2+ 和 OSX 10.5+ 的一種可以對文本格式和文本佈局進行精細控制的文本引擎。它良好的結合了 UIKit 和 Core Graphics/Quartz:

 

 

       UIKit 的 UILabel 容許你經過在 IB 中簡單的拖曳添加文本,但你不能改變文本的顏色和其中的單詞。

       Core Graphics/Quartz幾乎容許你作任何系統容許的事情,但你須要爲每一個字形計算位置,並畫在屏幕上。

 

 

       CoreText正結合了這二者!你本身能夠徹底控制位置、佈局、相似文本大小和顏色這樣的屬性,CoreText將幫你完善其它的東西——相似文本換行、字體呈現等等。

 

 

       然而,CoreText.framework自己很是龐大,學習成本較高,使用起來也不是很方便,因此通常不是特殊須要,不多會有人去使用它。

 

 

       隨着iOS6 API的發佈,文字顯示的API愈來愈完善,其中一個重要的更新是在UITextField,UITextView和UILabel中加入了對AttributedString的支持,實現行距控制,字距控制,段落控制等高級功能也沒必要再去使用深奧的CoreText框架。

 

 

       而iOS7的發佈,蘋果又引入了TextKit,TextKit是一個快速而又現代化的文字排版和渲染引擎。

 

       TextKit並無新增類,只是在原有的文本顯示控件上進行了封裝,能夠在平時咱們最喜歡使用的UILabel,UITextField,UITextView等控件裏面使用,其最主要的做用就是爲程序提供文字排版和渲染的功能。

       蘋果引入TextKit的目的並不是要取代已有的CoreText框架,雖然CoreText的主要做用也是用於文字的排版和渲染,但它是一種先進而又處於底層技術,若是咱們須要將文本內容直接渲染到圖形上下文(Graphics context)時,從性能和易用性來考慮,最佳方案就是使用CoreText。而若是咱們須要直接利用蘋果提供的一些控件(如UITextView、UILabel和UITextField等)對文字進行排版,那麼藉助於UIKit中TextKit提供的API無疑更爲方便快捷。

       TextKit在文字處理方面具備很是強大的功能,而且開發者能夠對TextKit進行定製和擴展。據悉,蘋果利用了2年的時間來開發TextKit,相信這對許多開發者來講都是福音。

 

       然而,不管CoreText仍是TextKit都不在本文討論的範疇,由於它們都是很是龐大的體系,而咱們的需求經過一個簡單小巧的AttributedString就能夠輕鬆搞定,因此本文的關注點只有一個,那就是AttributedString,至於CoreText和TextKit,在真正須要的時候再進行深刻研究和總結。

 

 

 

OK,囉嗦完畢,進入正題。

 

 

       與NSString相似,在iOS中AttributedString也分爲NSAttributedString和NSMutableAttributedString,不一樣的是,AttributedString對象多了一個Attribute的概念,一個AttributedString的對象包含不少的屬性,每個屬性都有其對應的字符區域,在這裏是使用NSRange來進行描述的。

 

 

 

使用AttributedString的方式一般有兩種:

 

方式一:

 

    首先初始化一個NSMutableAttributedString,而後向裏面添加文字樣式,最後將它賦給控件的AttributedText,該方法適合於文本較少而又須要分段精細控制的狀況。

 

 

NSString *originStr = @"Hello,中秋節!";

 

//方式一

 

//建立 NSMutableAttributedString

NSMutableAttributedString *attributedStr01 = [[NSMutableAttributedString alloc] initWithString: originStr];

 

//添加屬性

 

//給全部字符設置字體爲Zapfino,字體高度爲15像素

[attributedStr01 addAttribute: NSFontAttributeName value: [UIFont fontWithName: @"Zapfino" size: 15]

                                                   range: NSMakeRange(0, originStr.length)];

//分段控制,最開始4個字符顏色設置成藍色

[attributedStr01 addAttribute: NSForegroundColorAttributeName value: [UIColor blueColor] range: NSMakeRange(0, 4)];

//分段控制,第5個字符開始的3個字符,即第五、六、7字符設置爲紅色

[attributedStr01 addAttribute: NSForegroundColorAttributeName value: [UIColor redColor] range: NSMakeRange(4, 3)];

 

//賦值給顯示控件label01的 attributedText

_label01.attributedText = attributedStr01;

 

 

 

 

方式二:

 

      首先建立屬性字典,初始化各類屬性,而後和須要控制的文本一塊兒建立並賦值給控件的AttributedText,該方法適合於須要控制的文本較多總體控制的狀況,一般是從文件中讀取的大段文本控制。

 

  

//方式二

 

//建立屬性字典

NSDictionary *attrDict = @{ NSFontAttributeName: [UIFont fontWithName: @"Zapfino" size: 15],

                            NSForegroundColorAttributeName: [UIColor blueColor] };

 

//建立 NSAttributedString 並賦值

_label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict];

 

 

   

 

       經過對比兩個例子能夠看出,方式一比較容易處理複雜的格式,可是屬性設置比較繁多複雜,而方式二的屬性設置比較簡單明瞭,卻不善於處理複雜多樣的格式控制,可是不善於並不等於不能,能夠經過屬性字符串分段的方式來達到方式一的效果,以下:

 

//方式二的分段處理

//第一段

NSDictionary *attrDict1 = @{ NSFontAttributeName: [UIFont fontWithName: @"Zapfino" size: 15],

                             NSForegroundColorAttributeName: [UIColor blueColor] };

NSAttributedString *attrStr1 = [[NSAttributedString alloc] initWithString: [originStr substringWithRange: NSMakeRange(0, 4)] attributes: attrDict1];

 

//第二段

NSDictionary *attrDict2 = @{ NSFontAttributeName: [UIFont fontWithName: @"Zapfino" size: 15],

                             NSForegroundColorAttributeName: [UIColor redColor] };

NSAttributedString *attrStr2 = [[NSAttributedString alloc] initWithString: [originStr substringWithRange: NSMakeRange(4, 3)] attributes: attrDict2];

 

//第三段

NSDictionary *attrDict3 = @{ NSFontAttributeName: [UIFont fontWithName: @"Zapfino" size: 15],

                             NSForegroundColorAttributeName: [UIColor blackColor] };

NSAttributedString *attrStr3 = [[NSAttributedString alloc] initWithString: [originStr substringWithRange:

                                                                            NSMakeRange(7, originStr.length - 4 - 3)] attributes: attrDict3];

//合併

NSMutableAttributedString *attributedStr03 = [[NSMutableAttributedString alloc] initWithAttributedString: attrStr1];

[attributedStr03 appendAttributedString: attrStr2];

[attributedStr03 appendAttributedString: attrStr3];

 

_label03.attributedText = attributedStr03;

 

 

 

 

 

 

 

 

好了,講完AttributedString的建立方式,下面研究下AttributedString究竟能夠設置哪些屬性,具體來講,有如下21個:

 

// NSFontAttributeName                設置字體屬性,默認值:字體:Helvetica(Neue) 字號:12

// NSForegroundColorAttributeNam      設置字體顏色,取值爲 UIColor對象,默認值爲黑色

// NSBackgroundColorAttributeName     設置字體所在區域背景顏色,取值爲 UIColor對象,默認值爲nil, 透明色

// NSLigatureAttributeName            設置連體屬性,取值爲NSNumber 對象(整數),0 表示沒有連體字符,1 表示使用默認的連體字符

// NSKernAttributeName                設定字符間距,取值爲 NSNumber 對象(整數),正值間距加寬,負值間距變窄

// NSStrikethroughStyleAttributeName  設置刪除線,取值爲 NSNumber 對象(整數)

// NSStrikethroughColorAttributeName  設置刪除線顏色,取值爲 UIColor 對象,默認值爲黑色

// NSUnderlineStyleAttributeName      設置下劃線,取值爲 NSNumber 對象(整數),枚舉常量 NSUnderlineStyle中的值,與刪除線相似

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

// NSStrokeWidthAttributeName         設置筆畫寬度,取值爲 NSNumber 對象(整數),負值填充效果,正值中空效果

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

// NSShadowAttributeName              設置陰影屬性,取值爲 NSShadow 對象

// NSTextEffectAttributeName          設置文本特殊效果,取值爲 NSString 對象,目前只有圖版印刷效果可用:

// NSBaselineOffsetAttributeName      設置基線偏移值,取值爲 NSNumber (float),正值上偏,負值下偏

// NSObliquenessAttributeName         設置字形傾斜度,取值爲 NSNumber (float),正值右傾,負值左傾

// NSExpansionAttributeName           設置文本橫向拉伸屬性,取值爲 NSNumber (float),正值橫向拉伸文本,負值橫向壓縮文本

// NSWritingDirectionAttributeName    設置文字書寫方向,從左向右書寫或者從右向左書寫

// NSVerticalGlyphFormAttributeName   設置文字排版方向,取值爲 NSNumber 對象(整數),0 表示橫排文本,1 表示豎排文本

// NSLinkAttributeName                設置連接屬性,點擊後調用瀏覽器打開指定URL地址

// NSAttachmentAttributeName          設置文本附件,取值爲NSTextAttachment對象,經常使用於文字圖片混排

// NSParagraphStyleAttributeName      設置文本段落排版格式,取值爲 NSParagraphStyle 對象 

 

 

下面就一一舉例說明:

 

1. NSFontAttributeName

 

 

//NSForegroundColorAttributeName 設置字體顏色,取值爲 UIColor,默認爲黑色

 

NSDictionary *attrDict1 = @{ NSForegroundColorAttributeName: [UIColor redColor] };

NSDictionary *attrDict2 = @{ NSForegroundColorAttributeName: [UIColor blueColor] };

NSDictionary *attrDict3 = @{ NSForegroundColorAttributeName: [UIColor orangeColor] };

 

_label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1];

_label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2];

_label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict3];

 

 

 

注意:

 

       NSForegroundColorAttributeName設置的顏色與UILabel的textColor屬性設置的顏色在地位上是相等的,誰最後賦值,最終顯示的就是誰的顏色。

 

 

 

2. NSBackgroundColorAttributeName

 

 

//NSForegroundColorAttributeName 設置字體顏色,取值爲 UIColor,默認爲黑色

 

NSDictionary *attrDict1 = @{ NSForegroundColorAttributeName: [UIColor redColor] };

NSDictionary *attrDict2 = @{ NSForegroundColorAttributeName: [UIColor blueColor] };

NSDictionary *attrDict3 = @{ NSForegroundColorAttributeName: [UIColor orangeColor] };

 

_label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1];

_label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2];

_label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict3];

 

 

//NSBackgroundColorAttributeName 設置字體所在區域背景的顏色,取值爲UIColor,默認值爲nil

 

NSDictionary *attrDict4 = @{ NSBackgroundColorAttributeName: [UIColor orangeColor] };

NSDictionary *attrDict5 = @{ NSBackgroundColorAttributeName: [UIColor redColor] };

NSDictionary *attrDict6 = @{ NSBackgroundColorAttributeName: [UIColor cyanColor] };

 

_label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict4];

_label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict5];

_label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict6];

 

 

 

 

       仔細觀察會發現個問題,我並無關閉 NSForegroundColorAttributeName 屬性,可是在運行結果中,全部字體的顏色都變成了默認色——黑色,這說明 NSForegroundColorAttributeName 和 NSBackgroundColorAttributeName 的低位是相等的,跟前面介紹的 textColor 同樣,哪一個屬性最後一次賦值,就會沖掉前面的效果,如果咱們把屬性代碼順序交換一下

 

 

//NSBackgroundColorAttributeName 設置字體所在區域背景的顏色,取值爲UIColor,默認值爲nil

 

NSDictionary *attrDict4 = @{ NSBackgroundColorAttributeName: [UIColor orangeColor] };

NSDictionary *attrDict5 = @{ NSBackgroundColorAttributeName: [UIColor redColor] };

NSDictionary *attrDict6 = @{ NSBackgroundColorAttributeName: [UIColor cyanColor] };

 

_label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict4];

_label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict5];

_label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict6];

 

//NSForegroundColorAttributeName 設置字體顏色,取值爲 UIColor,默認爲黑色

 

NSDictionary *attrDict1 = @{ NSForegroundColorAttributeName: [UIColor redColor] };

NSDictionary *attrDict2 = @{ NSForegroundColorAttributeName: [UIColor blueColor] };

NSDictionary *attrDict3 = @{ NSForegroundColorAttributeName: [UIColor orangeColor] };

 

_label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1];

_label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2];

_label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict3];

 

 

 

 

可是textColor屬性能夠與 NSBackgroundColorAttributeName 屬性疊加

 

 

_label01.textColor = [UIColor greenColor];

_label02.textColor = [UIColor yellowColor];

_label03.textColor = [UIColor blueColor];

 

//NSForegroundColorAttributeName 設置字體顏色,取值爲 UIColor,默認爲黑色

 

NSDictionary *attrDict1 = @{ NSForegroundColorAttributeName: [UIColor redColor] };

NSDictionary *attrDict2 = @{ NSForegroundColorAttributeName: [UIColor blueColor] };

NSDictionary *attrDict3 = @{ NSForegroundColorAttributeName: [UIColor orangeColor] };

 

_label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1];

_label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2];

_label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict3];

 

 

//NSBackgroundColorAttributeName 設置字體所在區域背景的顏色,取值爲UIColor,默認值爲nil

 

NSDictionary *attrDict4 = @{ NSBackgroundColorAttributeName: [UIColor orangeColor] };

NSDictionary *attrDict5 = @{ NSBackgroundColorAttributeName: [UIColor redColor] };

NSDictionary *attrDict6 = @{ NSBackgroundColorAttributeName: [UIColor cyanColor] };

 

_label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict4];

_label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict5];

_label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict6];

 

 

 

       雖然 textColor 在 NSFontAttributeName 以前賦值,可是因爲 NSFontAttributeName 的屬性效果被NSBackgroundColorAttributeName 屬性沖掉了,因此最終顯示了 textColor 的顏色。

 

 

 

3. NSLigatureAttributeName

 

//NSLigatureAttributeName 設置連體屬性,取值爲NSNumber 對象(整數),0 表示沒有連體字符,1 表示使用默認的連體字符,

//                        2 表示使用全部連體符號,默認值爲 1(iOS 不支持 2)

 

NSString *ligatureStr = @"flush";

 

NSDictionary *attrDict1 = @{ NSLigatureAttributeName: [NSNumber numberWithInt: 0],

                             NSFontAttributeName: [UIFont fontWithName: @"futura" size: 30] };

_label01.attributedText = [[NSAttributedString alloc] initWithString: ligatureStr attributes: attrDict1];

 

NSDictionary *attrDict2 = @{ NSLigatureAttributeName: @(1),

                             NSFontAttributeName: [UIFont fontWithName: @"futura" size: 30] 

                             };

_label02.attributedText = [[NSAttributedString alloc] initWithString: ligatureStr attributes: attrDict2];

       因爲要展現連體字符,因此將前面使用的帶有中文的字符串換成 flush

 

       NSLigatureAttributeName的取值爲NSNumber對象,因此不能直接將一個整數值賦給它,建立 NSNumber 對象的方法有不少,或者能夠簡寫成 @(int)

 

 

 

 

 

       注意觀察字母f和l之間的變化。

 

       感受連寫就是一個藝術字功能,當字符f和l組合使用組合符號(所謂的字形(glyph))繪製時,看起來確實更加美觀。可是並不是全部的字符之間都有組合符號,事實上,只有某些字體中得某些字符的組合(如字符f和l,字符f和i等)才具備美觀的組合符號。

 

 

 

4. NSKernAttributeName

 

 

//NSKernAttributeName 設定字符間距,取值爲 NSNumber 對象(整數),正值間距加寬,負值間距變窄

   

   

  NSDictionary *attrDict1 = @{ NSKernAttributeName: @(-3),

                               NSFontAttributeName: [UIFont systemFontOfSize: 20]

                               };

  _label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1];

   

   

  NSDictionary *attrDict2 = @{ NSKernAttributeName: @(0),

                               NSFontAttributeName: [UIFont systemFontOfSize: 20]

                               };

  _label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2];

   

   

  NSDictionary *attrDict3 = @{ NSKernAttributeName: @(10),

                               NSFontAttributeName: [UIFont systemFontOfSize: 20]

                               };

  _label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict3];

 

 

 

 

 

 

5. NSStrikethroughStyleAttributeName

 

 

//NSStrikethroughStyleAttributeName 設置刪除線,取值爲 NSNumber 對象(整數),枚舉常量 NSUnderlineStyle中的值

// NSUnderlineStyleNone   不設置刪除線

// NSUnderlineStyleSingle 設置刪除線爲細單實線

// NSUnderlineStyleThick  設置刪除線爲粗單實線

// NSUnderlineStyleDouble 設置刪除線爲細雙實線

 

 

NSDictionary *attrDict1 = @{ NSStrikethroughStyleAttributeName: @(NSUnderlineStyleSingle),

                             NSFontAttributeName: [UIFont systemFontOfSize:20] };

_label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1];

 

 

NSDictionary *attrDict2 = @{ NSStrikethroughStyleAttributeName: @(NSUnderlineStyleThick),

                             NSFontAttributeName: [UIFont systemFontOfSize:20] };

_label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2];

 

 

NSDictionary *attrDict3 = @{ NSStrikethroughStyleAttributeName: @(NSUnderlineStyleDouble),

                             NSFontAttributeName: [UIFont systemFontOfSize:20] };

_label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict3];

注意:

 

       雖然使用了枚舉常量,可是枚舉常量的本質仍爲整數,因此一樣必須先轉化爲 NSNumber 才能使用

 

       刪除線和下劃線使用相同的枚舉常量做爲其屬性值

 

       目前iOS中只有上面列出的4中效果,雖然咱們可以在頭文件中發現其餘更多的取值,可是使用後沒有任何效果

 

 

 

 

 

 

能夠看出,中文和英文刪除線的位置有所不一樣

 

       另外,刪除線屬性取值除了上面的4種外,其實還能夠取其餘整數值,有興趣的能夠自行試驗,取值爲 0 - 7時,效果爲單實線,隨着值得增長,單實線逐漸變粗,取值爲 9 - 15時,效果爲雙實線,取值越大,雙實線越粗。

 

NSDictionary *attrDict1 = @{ NSStrikethroughStyleAttributeName: @(1),

                             NSFontAttributeName: [UIFont systemFontOfSize:20] };

_label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1];

 

 

NSDictionary *attrDict2 = @{ NSStrikethroughStyleAttributeName: @(3),

                             NSFontAttributeName: [UIFont systemFontOfSize:20] };

_label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2];

 

 

NSDictionary *attrDict3 = @{ NSStrikethroughStyleAttributeName: @(7),

                             NSFontAttributeName: [UIFont systemFontOfSize:20] };

_label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict3];

 

 

 

 

 

6. NSStrikethroughColorAttributeName

 

 

//NSStrikethroughColorAttributeName 設置刪除線顏色,取值爲 UIColor 對象,默認值爲黑色

   

  NSDictionary *attrDict1 = @{ NSStrikethroughColorAttributeName: [UIColor blueColor],

                               NSStrikethroughStyleAttributeName: @(1),

                               NSFontAttributeName: [UIFont systemFontOfSize:20] };

  _label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1];

   

   

  NSDictionary *attrDict2 = @{ NSStrikethroughColorAttributeName: [UIColor orangeColor],

                               NSStrikethroughStyleAttributeName: @(3),

                               NSFontAttributeName: [UIFont systemFontOfSize:20] };

  _label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2];

   

   

  NSDictionary *attrDict3 = @{ NSStrikethroughColorAttributeName: [UIColor greenColor],

                               NSStrikethroughStyleAttributeName: @(7),

                               NSFontAttributeName: [UIFont systemFontOfSize:20] };

  _label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict3];

 

 

 

 

 

 

7. NSUnderlineStyleAttributeName

 

    下劃線除了線條位置和刪除線不一樣外,其餘的均可以徹底參照刪除線設置。

 

 

//NSUnderlineStyleAttributeName 設置下劃線,取值爲 NSNumber 對象(整數),枚舉常量 NSUnderlineStyle中的值,與刪除線相似

 

NSDictionary *attrDict1 = @{ NSUnderlineStyleAttributeName: @(NSUnderlineStyleSingle),

                             NSFontAttributeName: [UIFont systemFontOfSize:20] };

_label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1];

 

 

NSDictionary *attrDict2 = @{ NSUnderlineStyleAttributeName: @(NSUnderlineStyleThick),

                             NSFontAttributeName: [UIFont systemFontOfSize:20] };

_label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2];

 

 

NSDictionary *attrDict3 = @{ NSUnderlineStyleAttributeName: @(NSUnderlineStyleDouble),

                             NSFontAttributeName: [UIFont systemFontOfSize:20] };

_label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict3];

 

 

 

 

 

8. NSUnderlineColorAttributeName

 

    能夠徹底參照下劃線顏色設置

 

 

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

    

   NSDictionary *attrDict1 = @{ NSUnderlineColorAttributeName: [UIColor blueColor],

                                NSUnderlineStyleAttributeName: @(NSUnderlineStyleSingle),

                                NSFontAttributeName: [UIFont systemFontOfSize:20] };

   _label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1];

    

    

   NSDictionary *attrDict2 = @{ NSUnderlineColorAttributeName: [UIColor orangeColor],

                                NSUnderlineStyleAttributeName: @(NSUnderlineStyleThick),

                                NSFontAttributeName: [UIFont systemFontOfSize:20] };

   _label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2];

    

    

   NSDictionary *attrDict3 = @{ NSUnderlineColorAttributeName: [UIColor greenColor],

                                NSUnderlineStyleAttributeName: @(NSUnderlineStyleDouble),

                                NSFontAttributeName: [UIFont systemFontOfSize:20] };

   _label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict3];

 

 

 

 

 

 

9. NSStrokeWidthAttributeName

 

 

//NSStrokeWidthAttributeName 設置筆畫寬度,取值爲 NSNumber 對象(整數),負值填充效果,正值中空效果

   

  NSDictionary *attrDict1 = @{ NSStrokeWidthAttributeName: @(-3),

                               NSFontAttributeName: [UIFont systemFontOfSize:30] };

  _label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1];

   

   

  NSDictionary *attrDict2 = @{ NSStrokeWidthAttributeName: @(0),

                               NSFontAttributeName: [UIFont systemFontOfSize:30] };

  _label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2];

   

   

  NSDictionary *attrDict3 = @{ NSStrokeWidthAttributeName: @(3),

                               NSFontAttributeName: [UIFont systemFontOfSize:30] };

  _label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict3];

 

 

 

 

 

 

10. NSStrokeColorAttributeName

 

 

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

    

   NSDictionary *attrDict1 = @{ NSStrokeWidthAttributeName: @(-3),

                                NSStrokeColorAttributeName: [UIColor orangeColor],

                                NSFontAttributeName: [UIFont systemFontOfSize:30] };

   _label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1];

    

    

   NSDictionary *attrDict2 = @{ NSStrokeWidthAttributeName: @(0),

                                NSStrokeColorAttributeName: [UIColor blueColor],

                                NSFontAttributeName: [UIFont systemFontOfSize:30] };

   _label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2];

    

    

   NSDictionary *attrDict3 = @{ NSStrokeWidthAttributeName: @(3),

                                NSStrokeColorAttributeName: [UIColor greenColor],

                                NSFontAttributeName: [UIFont systemFontOfSize:30] };

   _label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict3];

相關文章
相關標籤/搜索