ios富文本

  • 以前作項目時遇到一個問題:瀏覽器

     

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

     

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

     

     

    正題開始以前插播一點基礎知識:佈局

     

     

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

     

     

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

     

            UILabel字體

     

            UITextFieldorm

     

            UITextView對象

     

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

     

           此時難免要提起一個很是強大的文本排版框架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];

相關文章
相關標籤/搜索