iOS6之後 NSAttributedString 的福利

@在iOS6之前需要使用NSMutableAttributedString時都需要導入:CoreText.framework框架的,但在iOS6 之後就不在需要了.

[objc] view plaincopy
  1. - (void)testOfNSMutableAttributedStringAndNSAttributedString  
  2. {  
  3.     /** 
  4.      *  - (void)addAttribute:(NSString *)name value:(id)value range:(NSRange)range; 
  5.      *  主要方法 
  6.      *  name   屬性名 
  7.      *  value  屬性對應效果的值 
  8.      *  range  效果所映射的範圍 
  9.      */  
  10.       
  11.     #pragma mark  測試數據0  
  12.     NSString *testString = @"NSMutableAttributed---0";  
  13.     UILabel *testLabel = [[UILabel alloc] initWithFrame:CGRectMake(6010020040)];  
  14.     NSMutableAttributedString * testAttriString = [[NSMutableAttributedString alloc] initWithString:testString];  
  15.     // 添加刪除線  
  16.     [testAttriString addAttribute:NSStrikethroughStyleAttributeName value:[NSNumber numberWithInt:NSUnderlineStyleSingle] range:NSMakeRange(0, testAttriString.length)];  
  17.     // 添加下劃線  
  18.     [testAttriString addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInt:NSUnderlineStyleSingle] range:NSMakeRange(0, testAttriString.length)];  
  19.     // 設置文本的字體以及大小  
  20.     [testAttriString addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"Helvetica-Bold" size:15] range:NSMakeRange(0, testAttriString.length)];  
  21.     // 設置筆畫的粗細  
  22.     [testAttriString addAttribute:NSStrokeWidthAttributeName value:[NSNumber numberWithInt:NSUnderlineStyleDouble] range:NSMakeRange(0, testAttriString.length)];  
  23.     // label的背景顏色  
  24.     [testAttriString addAttribute:NSBackgroundColorAttributeName value:[UIColor yellowColor] range:NSMakeRange(0, testAttriString.length)];  
  25.     // 目前沒測出什麼效果.....  
  26.     [testAttriString addAttribute:NSVerticalGlyphFormAttributeName value:[NSNumber numberWithInt:1] range:NSMakeRange(0, testAttriString.length)];  
  27.     // label上文本顏色(也會影響刪除線和下劃線的顏色)  
  28.     [testAttriString addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0, testAttriString.length)];  
  29.     testLabel.attributedText = testAttriString;  
  30.       
  31.     #pragma mark 測試數據1  
  32.     NSString *testString1 = @"NSMutableAttributed---1";  
  33.     UILabel *testLabel1 = [[UILabel alloc] initWithFrame:CGRectMake(6020020040)];  
  34.     NSMutableAttributedString * testAttriString1 = [[NSMutableAttributedString alloc] initWithString:testString1];  
  35.     // 實現文本內容顏色和下劃線,刪除線的顏色不一樣  
  36.     // NSStrokeColorAttributeName 單獨設置沒有效果  
  37.     // 必須與NSStrokeWidthAttributeName一起設置  
  38.     [testAttriString1 addAttribute:NSStrikethroughStyleAttributeName value:[NSNumber numberWithInt:NSUnderlineStyleSingle] range:NSMakeRange(0, testAttriString1.length)];  
  39.     [testAttriString1 addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0, testAttriString1.length)];  
  40.     [testAttriString1 addAttribute:NSStrokeColorAttributeName value:[UIColor cyanColor] range:NSMakeRange(0, testAttriString1.length)];  
  41.     [testAttriString1 addAttribute:NSStrokeWidthAttributeName value:[NSNumber numberWithInt:NSUnderlineStyleDouble] range:NSMakeRange(0, testAttriString1.length)];  
  42.     testLabel1.attributedText = testAttriString1;  
  43.       
  44.       
  45.     #pragma mark 測試數據2  
  46.     NSString *testString2 = @"NSMutableAttributed---2";  
  47.     UILabel *testLabel2= [[UILabel alloc] initWithFrame:CGRectMake(6030020040)];  
  48.     NSMutableAttributedString * testAttriString2 = [[NSMutableAttributedString alloc] initWithString:testString2];  
  49.     // 筆畫的陰影效果  
  50.     NSShadow *shadow = [[NSShadow alloc] init];  
  51.     [shadow setShadowColor:[UIColor colorWithRed:0.053 green:0.088 blue:0.205 alpha:1.000]];  
  52.     [shadow setShadowBlurRadius:4.0];  
  53.     [shadow setShadowOffset:CGSizeMake(22)];  
  54.     [testAttriString2 addAttribute:NSShadowAttributeName value:shadow range:NSMakeRange(0, [testAttriString2 length])];  
  55.     testLabel2.backgroundColor = [UIColor clearColor];  
  56.     testLabel2.attributedText = testAttriString2;  
  57.       
  58.     [self.view addSubview:testLabel];  
  59.     [self.view addSubview:testLabel1];  
  60.     [self.view addSubview:testLabel2];  
  61. }  

[objc] view plaincopy
  1. 使用AttributedString的方式通常有兩種:  
  2.    
  3. 方式一:  
  4.    
  5.     首先初始化一個NSMutableAttributedString,然後向裏面添加文字樣式,最後將它賦給控件的AttributedText,該方法適合於文本較少而又需要分段精細控制的情況。  
  6.    
  7.    
  8. NSString *originStr = @"Hello,中秋節!";  
  9.    
  10. //方式一  
  11.    
  12. //創建 NSMutableAttributedString  
  13. NSMutableAttributedString *attributedStr01 = [[NSMutableAttributedString alloc] initWithString: originStr];  
  14.    
  15. //添加屬性  
  16.    
  17. //給所有字符設置字體爲Zapfino,字體高度爲15像素  
  18. [attributedStr01 addAttribute: NSFontAttributeName value: [UIFont fontWithName@"Zapfino" size: 15]  
  19.                                                    range: NSMakeRange(0, originStr.length)];  
  20. //分段控制,最開始4個字符顏色設置成藍色  
  21. [attributedStr01 addAttribute: NSForegroundColorAttributeName value: [UIColor blueColor] range: NSMakeRange(04)];  
  22. //分段控制,第5個字符開始的3個字符,即第5、6、7字符設置爲紅色  
  23. [attributedStr01 addAttribute: NSForegroundColorAttributeName value: [UIColor redColor] range: NSMakeRange(43)];  
  24.    
  25. //賦值給顯示控件label01的 attributedText  
  26. _label01.attributedText = attributedStr01;  
  27.    
  28.    
  29.    
  30.    
  31. 方式二:  
  32.    
  33.       首先創建屬性字典,初始化各種屬性,然後和需要控制的文本一起創建並賦值給控件的AttributedText,該方法適合於需要控制的文本較多整體控制的情況,通常是從文件中讀取的大段文本控制。  
  34.    
  35.     
  36. //方式二  
  37.    
  38. //創建屬性字典  
  39. NSDictionary *attrDict = @{ NSFontAttributeName: [UIFont fontWithName@"Zapfino" size: 15],  
  40.                             NSForegroundColorAttributeName: [UIColor blueColor] };  
  41.    
  42. //創建 NSAttributedString 並賦值  
  43. _label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict];  
  44.    
  45.    
  46.      
  47.    
  48.        通過對比兩個例子可以看出,方式一比較容易處理複雜的格式,但是屬性設置比較繁多複雜,而方式二的屬性設置比較簡單明瞭,卻不善於處理複雜多樣的格式控制,但是不善於並不等於不能,可以通過屬性字符串分段的方式來達到方式一的效果,如下:  
  49.    
  50. //方式二的分段處理  
  51. //第一段  
  52. NSDictionary *attrDict1 = @{ NSFontAttributeName: [UIFont fontWithName@"Zapfino" size: 15],  
  53.                              NSForegroundColorAttributeName: [UIColor blueColor] };  
  54. NSAttributedString *attrStr1 = [[NSAttributedString alloc] initWithString: [originStr substringWithRange: NSMakeRange(04)] attributes: attrDict1];  
  55.    
  56. //第二段  
  57. NSDictionary *attrDict2 = @{ NSFontAttributeName: [UIFont fontWithName@"Zapfino" size: 15],  
  58.                              NSForegroundColorAttributeName: [UIColor redColor] };  
  59. NSAttributedString *attrStr2 = [[NSAttributedString alloc] initWithString: [originStr substringWithRange: NSMakeRange(43)] attributes: attrDict2];  
  60.    
  61. //第三段  
  62. NSDictionary *attrDict3 = @{ NSFontAttributeName: [UIFont fontWithName@"Zapfino" size: 15],  
  63.                              NSForegroundColorAttributeName: [UIColor blackColor] };  
  64. NSAttributedString *attrStr3 = [[NSAttributedString alloc] initWithString: [originStr substringWithRange:  
  65.                                                                             NSMakeRange(7, originStr.length - 4 - 3)] attributes: attrDict3];  
  66. //合併  
  67. NSMutableAttributedString *attributedStr03 = [[NSMutableAttributedString alloc] initWithAttributedString: attrStr1];  
  68. [attributedStr03 appendAttributedString: attrStr2];  
  69. [attributedStr03 appendAttributedString: attrStr3];  
  70.    
  71. _label03.attributedText = attributedStr03;  
  72.    
  73.    
  74.    
  75.    
  76. @AttributedString究竟可以設置哪些屬性,具體來說,有以下21個:   
  77. // NSFontAttributeName                設置字體屬性,默認值:字體:Helvetica(Neue) 字號:12  
  78. // NSForegroundColorAttributeNam      設置字體顏色,取值爲 UIColor對象,默認值爲黑色  
  79. // NSBackgroundColorAttributeName     設置字體所在區域背景顏色,取值爲 UIColor對象,默認值爲nil, 透明色  
  80. // NSLigatureAttributeName            設置連體屬性,取值爲NSNumber 對象(整數),0 表示沒有連體字符,1 表示使用默認的連體字符  
  81. // NSKernAttributeName                設定字符間距,取值爲 NSNumber 對象(整數),正值間距加寬,負值間距變窄  
  82. // NSStrikethroughStyleAttributeName  設置刪除線,取值爲 NSNumber 對象(整數)  
  83. // NSStrikethroughColorAttributeName  設置刪除線顏色,取值爲 UIColor 對象,默認值爲黑色  
  84. // NSUnderlineStyleAttributeName      設置下劃線,取值爲 NSNumber 對象(整數),枚舉常量 NSUnderlineStyle中的值,與刪除線類似  
  85. // NSUnderlineColorAttributeName      設置下劃線顏色,取值爲 UIColor 對象,默認值爲黑色  
  86. // NSStrokeWidthAttributeName         設置筆畫寬度,取值爲 NSNumber 對象(整數),負值填充效果,正值中空效果  
  87. // NSStrokeColorAttributeName         填充部分顏色,不是字體顏色,取值爲 UIColor 對象  
  88. // NSShadowAttributeName              設置陰影屬性,取值爲 NSShadow 對象  
  89. // NSTextEffectAttributeName          設置文本特殊效果,取值爲 NSString 對象,目前只有圖版印刷效果可用:  
  90. // NSBaselineOffsetAttributeName      設置基線偏移值,取值爲 NSNumber (float),正值上偏,負值下偏  
  91. // NSObliquenessAttributeName         設置字形傾斜度,取值爲 NSNumber (float),正值右傾,負值左傾  
  92. // NSExpansionAttributeName           設置文本橫向拉伸屬性,取值爲 NSNumber (float),正值橫向拉伸文本,負值橫向壓縮文本  
  93. // NSWritingDirectionAttributeName    設置文字書寫方向,從左向右書寫或者從右向左書寫  
  94. // NSVerticalGlyphFormAttributeName   設置文字排版方向,取值爲 NSNumber 對象(整數),0 表示橫排文本,1 表示豎排文本  
  95. // NSLinkAttributeName                設置鏈接屬性,點擊後調用瀏覽器打開指定URL地址  
  96. // NSAttachmentAttributeName          設置文本附件,取值爲NSTextAttachment對象,常用於文字圖片混排  
  97. // NSParagraphStyleAttributeName      設置文本段落排版格式,取值爲 NSParagraphStyle 對象   
  98.    
  99.    
  100. 下面就一一舉例說明:  
  101.    
  102. 1. NSFontAttributeName  
  103.    
  104.    
  105. //NSForegroundColorAttributeName 設置字體顏色,取值爲 UIColor,默認爲黑色  
  106.    
  107. NSDictionary *attrDict1 = @{ NSForegroundColorAttributeName: [UIColor redColor] };  
  108. NSDictionary *attrDict2 = @{ NSForegroundColorAttributeName: [UIColor blueColor] };  
  109. NSDictionary *attrDict3 = @{ NSForegroundColorAttributeName: [UIColor orangeColor] };  
  110.    
  111. _label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1];  
  112. _label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2];  
  113. _label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict3];  
  114.    
  115.    
  116.    
  117. 注意:  
  118.    
  119.        NSForegroundColorAttributeName設置的顏色與UILabel的textColor屬性設置的顏色在地位上是相等的,誰最後賦值,最終顯示的就是誰的顏色。  
  120.    
  121.    
  122.    
  123. 2. NSBackgroundColorAttributeName  
  124.    
  125.    
  126. //NSForegroundColorAttributeName 設置字體顏色,取值爲 UIColor,默認爲黑色  
  127.    
  128. NSDictionary *attrDict1 = @{ NSForegroundColorAttributeName: [UIColor redColor] };  
  129. NSDictionary *attrDict2 = @{ NSForegroundColorAttributeName: [UIColor blueColor] };  
  130. NSDictionary *attrDict3 = @{ NSForegroundColorAttributeName: [UIColor orangeColor] };  
  131.    
  132. _label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1];  
  133. _label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2];  
  134. _label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict3];  
  135.    
  136.    
  137. //NSBackgroundColorAttributeName 設置字體所在區域背景的顏色,取值爲UIColor,默認值爲nil  
  138.    
  139. NSDictionary *attrDict4 = @{ NSBackgroundColorAttributeName: [UIColor orangeColor] };  
  140. NSDictionary *attrDict5 = @{ NSBackgroundColorAttributeName: [UIColor redColor] };  
  141. NSDictionary *attrDict6 = @{ NSBackgroundColorAttributeName: [UIColor cyanColor] };  
  142.    
  143. _label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict4];  
  144. _label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict5];  
  145. _label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict6];  
  146.    
  147.    
  148.    
  149.    
  150.        仔細觀察會發現個問題,我並沒有關閉 NSForegroundColorAttributeName 屬性,但是在運行結果中,所有字體的顏色都變成了默認色——黑色,這說明 NSForegroundColorAttributeName 和 NSBackgroundColorAttributeName 的低位是相等的,跟前面介紹的 textColor 一樣,哪個屬性最後一次賦值,就會沖掉前面的效果,若是我們把屬性代碼順序交換一下  
  151.    
  152.    
  153. //NSBackgroundColorAttributeName 設置字體所在區域背景的顏色,取值爲UIColor,默認值爲nil  
  154.    
  155. NSDictionary *attrDict4 = @{ NSBackgroundColorAttributeName: [UIColor orangeColor] };  
  156. NSDictionary *attrDict5 = @{ NSBackgroundColorAttributeName: [UIColor redColor] };  
  157. NSDictionary *attrDict6 = @{ NSBackgroundColorAttributeName: [UIColor cyanColor] };  
  158.    
  159. _label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict4];  
  160. _label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict5];  
  161. _label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict6];  
  162.    
  163. //NSForegroundColorAttributeName 設置字體顏色,取值爲 UIColor,默認爲黑色  
  164.    
  165. NSDictionary *attrDict1 = @{ NSForegroundColorAttributeName: [UIColor redColor] };  
  166. NSDictionary *attrDict2 = @{ NSForegroundColorAttributeName: [UIColor blueColor] };  
  167. NSDictionary *attrDict3 = @{ NSForegroundColorAttributeName: [UIColor orangeColor] };  
  168.    
  169. _label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1];  
  170. _label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2];  
  171. _label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict3];  
  172.    
  173.    
  174.    
  175.    
  176. 但是textColor屬性可以與 NSBackgroundColorAttributeName 屬性疊加  
  177.    
  178.    
  179. _label01.textColor = [UIColor greenColor];  
  180. _label02.textColor = [UIColor yellowColor];  
  181. _label03.textColor = [UIColor blueColor];  
  182.    
  183. //NSForegroundColorAttributeName 設置字體顏色,取值爲 UIColor,默認爲黑色  
  184.    
  185. NSDictionary *attrDict1 = @{ NSForegroundColorAttributeName: [UIColor redColor] };  
  186. NSDictionary *attrDict2 = @{ NSForegroundColorAttributeName: [UIColor blueColor] };  
  187. NSDictionary *attrDict3 = @{ NSForegroundColorAttributeName: [UIColor orangeColor] };  
  188.    
  189. _label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1];  
  190. _label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2];  
  191. _label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict3];  
  192.    
  193.    
  194. //NSBackgroundColorAttributeName 設置字體所在區域背景的顏色,取值爲UIColor,默認值爲nil  
  195.    
  196. NSDictionary *attrDict4 = @{ NSBackgroundColorAttributeName: [UIColor orangeColor] };  
  197. NSDictionary *attrDict5 = @{ NSBackgroundColorAttributeName: [UIColor redColor] };  
  198. NSDictionary *attrDict6 = @{ NSBackgroundColorAttributeName: [UIColor cyanColor] };  
  199.    
  200. _label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict4];  
  201. _label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict5];  
  202. _label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict6];  
  203.    
  204.    
  205.    
  206.        雖然 textColor 在 NSFontAttributeName 之前賦值,但是由於 NSFontAttributeName 的屬性效果被NSBackgroundColorAttributeName 屬性沖掉了,所以最終顯示了 textColor 的顏色。  
  207.    
  208.    
  209.    
  210. 3. NSLigatureAttributeName  
  211.    
  212. //NSLigatureAttributeName 設置連體屬性,取值爲NSNumber 對象(整數),0 表示沒有連體字符,1 表示使用默認的連體字符,  
  213. //                        2 表示使用所有連體符號,默認值爲 1(iOS 不支持 2)  
  214.    
  215. NSString *ligatureStr = @"flush";  
  216.    
  217. NSDictionary *attrDict1 = @{ NSLigatureAttributeName: [NSNumber numberWithInt: 0],  
  218.                              NSFontAttributeName: [UIFont fontWithName@"futura" size: 30] };  
  219. _label01.attributedText = [[NSAttributedString alloc] initWithString: ligatureStr attributes: attrDict1];  
  220.    
  221. NSDictionary *attrDict2 = @{ NSLigatureAttributeName: @(1),  
  222.                              NSFontAttributeName: [UIFont fontWithName@"futura" size: 30]   
  223.                              };  
  224. _label02.attributedText = [[NSAttributedString alloc] initWithString: ligatureStr attributes: attrDict2];  
  225.        由於要展示連體字符,所以將前面使用的帶有中文的字符串換成 flush  
  226.    
  227.        NSLigatureAttributeName的取值爲NSNumber對象,所以不能直接將一個整數值賦給它,創建 NSNumber 對象的方法有很多,或者可以簡寫成 @(int)  
  228.    
  229.    
  230.    
  231.    
  232.    
  233.        注意觀察字母f和l之間的變化。  
  234.    
  235.        感覺連寫就是一個藝術字功能,當字符f和l組合使用組合符號(所謂的字形(glyph))繪製時,看起來確實更加美觀。但是並非所有的字符之間都有組合符號,事實上,只有某些字體中得某些字符的組合(如字符f和l,字符f和i等)才具有美觀的組合符號。  
  236.    
  237.    
  238.    
  239. 4. NSKernAttributeName  
  240.    
  241.    
  242. //NSKernAttributeName 設定字符間距,取值爲 NSNumber 對象(整數),正值間距加寬,負值間距變窄  
  243.      
  244.      
  245.   NSDictionary *attrDict1 = @{ NSKernAttributeName: @(-3),  
  246.                                NSFontAttributeName: [UIFont systemFontOfSize: 20]  
  247.                                };  
  248.   _label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1];  
  249.      
  250.      
  251.   NSDictionary *attrDict2 = @{ NSKernAttributeName: @(0),  
  252.                                NSFontAttributeName: [UIFont systemFontOfSize: 20]  
  253.                                };  
  254.   _label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2];  
  255.      
  256.      
  257.   NSDictionary *attrDict3 = @{ NSKernAttributeName: @(10),  
  258.                                NSFontAttributeName: [UIFont systemFontOfSize: 20]  
  259.                                };  
  260.   _label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict3];  
  261.    
  262.    
  263.    
  264.    
  265.    
  266.    
  267. 5. NSStrikethroughStyleAttributeName  
  268.    
  269.    
  270. //NSStrikethroughStyleAttributeName 設置刪除線,取值爲 NSNumber 對象(整數),枚舉常量 NSUnderlineStyle中的值  
  271. // NSUnderlineStyleNone   不設置刪除線  
  272. // NSUnderlineStyleSingle 設置刪除線爲細單實線  
  273. // NSUnderlineStyleThick  設置刪除線爲粗單實線  
  274. // NSUnderlineStyleDouble 設置刪除線爲細雙實線  
  275.    
  276.    
  277. NSDictionary *attrDict1 = @{ NSStrikethroughStyleAttributeName: @(NSUnderlineStyleSingle),  
  278.                              NSFontAttributeName: [UIFont systemFontOfSize:20] };  
  279. _label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1];  
  280.    
  281.    
  282. NSDictionary *attrDict2 = @{ NSStrikethroughStyleAttributeName: @(NSUnderlineStyleThick),  
  283.                              NSFontAttributeName: [UIFont systemFontOfSize:20] };  
  284. _label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2];  
  285.    
  286.    
  287. NSDictionary *attrDict3 = @{ NSStrikethroughStyleAttributeName: @(NSUnderlineStyleDouble),  
  288.                              NSFontAttributeName: [UIFont systemFontOfSize:20] };  
  289. _label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict3];  
  290. 注意:  
  291.    
  292.        雖然使用了枚舉常量,但是枚舉常量的本質仍爲整數,所以同樣必須先轉化爲 NSNumber 才能使用  
  293.    
  294.        刪除線和下劃線使用相同的枚舉常量作爲其屬性值  
  295.    
  296.        目前iOS中只有上面列出的4中效果,雖然我們能夠在頭文件中發現其他更多的取值,但是使用後沒有任何效果  
  297.    
  298.    
  299.    
  300.    
  301.    
  302.    
  303. 可以看出,中文和英文刪除線的位置有所不同  
  304.    
  305.        另外,刪除線屬性取值除了上面的4種外,其實還可以取其他整數值,有興趣的可以自行試驗,取值爲 0 - 7時,效果爲單實線,隨着值得增加,單實線逐漸變粗,取值爲 9 - 15時,效果爲雙實線,取值越大,雙實線越粗。  
  306.    
  307. NSDictionary *attrDict1 = @{ NSStrikethroughStyleAttributeName: @(1),  
  308.                              NSFontAttributeName: [UIFont systemFontOfSize:20] };  
  309. _label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1];  
  310.    
  311.    
  312. NSDictionary *attrDict2 = @{ NSStrikethroughStyleAttributeName: @(3),  
  313.                              NSFontAttributeName: [UIFont systemFontOfSize:20] };  
  314. _label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2];  
  315.    
  316.    
  317. NSDictionary *attrDict3 = @{ NSStrikethroughStyleAttributeName: @(7),  
  318.                              NSFontAttributeName: [UIFont systemFontOfSize:20] };  
  319. _label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict3];  
  320.    
  321.    
  322.    
  323.    
  324.    
  325. 6. NSStrikethroughColorAttributeName  
  326.    
  327.    
  328. //NSStrikethroughColorAttributeName 設置刪除線顏色,取值爲 UIColor 對象,默認值爲黑色  
  329.      
  330.   NSDictionary *attrDict1 = @{ NSStrikethroughColorAttributeName: [UIColor blueColor],  
  331.                                NSStrikethroughStyleAttributeName: @(1),  
  332.                                NSFontAttributeName: [UIFont systemFontOfSize:20] };  
  333.   _label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1];  
  334.      
  335.      
  336.   NSDictionary *attrDict2 = @{ NSStrikethroughColorAttributeName: [UIColor orangeColor],  
  337.                                NSStrikethroughStyleAttributeName: @(3),  
  338.                                NSFontAttributeName: [UIFont systemFontOfSize:20] };  
  339.   _label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2];  
  340.      
  341.      
  342.   NSDictionary *attrDict3 = @{ NSStrikethroughColorAttributeName: [UIColor greenColor],  
  343.                                NSStrikethroughStyleAttributeName: @(7),  
  344.                                NSFontAttributeName: [UIFont systemFontOfSize:20] };  
  345.   _label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict3];  
  346.    
  347.    
  348.    
  349.    
  350.    
  351.    
  352. 7. NSUnderlineStyleAttributeName  
  353.    
  354.     下劃線除了線條位置和刪除線不同外,其他的都可以完全參照刪除線設置。  
  355.    
  356.    
  357. //NSUnderlineStyleAttributeName 設置下劃線,取值爲 NSNumber 對象(整數),枚舉常量 NSUnderlineStyle中的值,與刪除線類似  
  358.    
  359. NSDictionary *attrDict1 = @{ NSUnderlineStyleAttributeName: @(NSUnderlineStyleSingle),  
  360.                              NSFontAttributeName: [UIFont systemFontOfSize:20] };  
  361. _label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1];  
  362.    
  363.    
  364. NSDictionary *attrDict2 = @{ NSUnderlineStyleAttributeName: @(NSUnderlineStyleThick),  
  365.                              NSFontAttributeName: [UIFont systemFontOfSize:20] };  
  366. _label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2];  
  367.    
  368.    
  369. NSDictionary *attrDict3 = @{ NSUnderlineStyleAttributeName: @(NSUnderlineStyleDouble),  
  370.                              NSFontAttributeName: [UIFont systemFontOfSize:20] };  
  371. _label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict3];  
  372.    
  373.    
  374.    
  375.    
  376.    
  377. 8. NSUnderlineColorAttributeName  
  378.    
  379.     可以完全參照下劃線顏色設置  
  380.    
  381.    
  382. //NSUnderlineColorAttributeName 設置下劃線顏色,取值爲 UIColor 對象,默認值爲黑色  
  383.       
  384.    NSDictionary *attrDict1 = @{ NSUnderlineColorAttributeName: [UIColor blueColor],  
  385.                                 NSUnderlineStyleAttributeName: @(NSUnderlineStyleSingle),  
  386.                                 NSFontAttributeName: [UIFont systemFontOfSize:20] };  
  387.    _label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1];  
  388.       
  389.       
  390.    NSDictionary *attrDict2 = @{ NSUnderlineColorAttributeName: [UIColor orangeColor],  
  391.                                 NSUnderlineStyleAttributeName: @(NSUnderlineStyleThick),  
  392.                                 NSFontAttributeName: [UIFont systemFontOfSize:20] };  
  393.    _label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2];  
  394.       
  395.       
  396.    NSDictionary *attrDict3 = @{ NSUnderlineColorAttributeName: [UIColor greenColor],  
  397.                                 NSUnderlineStyleAttributeName: @(NSUnderlineStyleDouble),  
  398.                                 NSFontAttributeName: [UIFont systemFontOfSize:20] };  
  399.    _label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict3];  
  400.    
  401.    
  402.    
  403.    
  404.    
  405.    
  406. 9. NSStrokeWidthAttributeName  
  407.    
  408.    
  409. //NSStrokeWidthAttributeName 設置筆畫寬度,取值爲 NSNumber 對象(整數),負值填充效果,正值中空效果  
  410.      
  411.   NSDictionary *attrDict1 = @{ NSStrokeWidthAttributeName: @(-3),  
  412.                                NSFontAttributeName: [UIFont systemFontOfSize:30] };  
  413.   _label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1];  
  414.      
  415.      
  416.   NSDictionary *attrDict2 = @{ NSStrokeWidthAttributeName: @(0),  
  417.                                NSFontAttributeName: [UIFont systemFontOfSize:30] };  
  418.   _label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2];  
  419.      
  420.      
  421.   NSDictionary *attrDict3 = @{ NSStrokeWidthAttributeName: @(3),  
  422.                                NSFontAttributeName: [UIFont systemFontOfSize:30] };  
  423.   _label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict3];  
  424.    
  425.    
  426.    
  427.    
  428.    
  429.    
  430. 10. NSStrokeColorAttributeName  
  431.    
  432.    
  433. //NSStrokeColorAttributeName 填充部分顏色,不是字體顏色,取值爲 UIColor 對象  
  434.       
  435.    NSDictionary *attrDict1 = @{ NSStrokeWidthAttributeName: @(-3),  
  436.                                 NSStrokeColorAttributeName: [UIColor orangeColor],  
  437.                                 NSFontAttributeName: [UIFont systemFontOfSize:30] };  
  438.    _label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1];  
  439.       
  440.       
  441.    NSDictionary *attrDict2 = @{ NSStrokeWidthAttributeName: @(0),  
  442.                                 NSStrokeColorAttributeName: [UIColor blueColor],  
  443.                                 NSFontAttributeName: [UIFont systemFontOfSize:30] };  
  444.    _label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2];  
  445.       
  446.       
  447.    NSDictionary *attrDict3 = @{ NSStrokeWidthAttributeName: @(3),  
  448.                                 NSStrokeColorAttributeName: [UIColor greenColor],  
  449.                                 NSFontAttributeName: [UIFont systemFontOfSize:30] };  
  450.    _label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict3];  
發佈了10 篇原創文章 · 獲贊 4 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章