// 打印系統中所有字體的類型名字
NSArray *familyNames = [UIFont familyNames];
for(NSString *familyName in familyNames ){
printf("Family: %s \n", [familyName UTF8String]);
NSArray *fontNames = [UIFont fontNamesForFamilyName:familyName];
for(NSString *fontName in fontNames) {
printf("\tFont: %s \n", [fontName UTF8String]);
}
}
//字符串簡單處理(改變顏色字體大小)
方式一:直接處理字符串
// 1.改變字符串里面某一范圍的字體大小以及顏色
NSMutableAttributedString *attributed = [[NSMutableAttributedString alloc] initWithString:str];
[attributed addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"Zapfino" size:20] range:NSMakeRange(0, str.length)];
[attributed addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(5, 2)];
label.attributedText = attributed;
// 2.改變字符串的字體顏色==直接對字符串Font和textColor的操作
NSDictionary *attrDict = @{NSFontAttributeName:[UIFont fontWithName: @"Zapfino" size: 15],
NSForegroundColorAttributeName:[UIColor blueColor]};
NSMutableAttributedString *attributed2 = [[NSMutableAttributedString alloc] initWithString:str attributes:attrDict];
label.attributedText = attributed2;
方式二:分段處理(把字符串根據自己的需求進行分段分片處理)
NSString *originStr = @"家里人今天的上課了國家的路口時根據法律的空格鍵";
//第一段
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];
label.attributedText = attributedStr03;
注意:
// NSForegroundColorAttributeName設置的顏色與UILabel的textColor屬性設置的顏色在地位上是相等的,誰最后賦值,最終顯示的就是誰的顏色。
屬性操作
一.// NSForegroundColorAttributeName 設置字體顏色,取值為 UIColor,默認為黑色
// NSDictionary *attrDict1 = @{ NSForegroundColorAttributeName: [UIColor redColor] };
// NSDictionary *attrDict2 = @{ NSForegroundColorAttributeName: [UIColor blueColor] };
// NSDictionary *attrDict3 = @{ NSForegroundColorAttributeName: [UIColor orangeColor] };
// label.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1];
// label2.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2];
// label3.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] };
// label1.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict4];
// label2.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict5];
// label3.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] };
// label1.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict4];
// label2.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict5];
// label3.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict6];
//NSForegroundColorAttributeName 設置字體顏色,取值為 UIColor,默認為黑色
// NSDictionary *attrDict1 = @{ NSForegroundColorAttributeName: [UIColor redColor] };
// NSDictionary *attrDict2 = @{ NSForegroundColorAttributeName: [UIColor blueColor] };
// NSDictionary *attrDict3 = @{ NSForegroundColorAttributeName: [UIColor orangeColor] };
// label1.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1];
// label2.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2];
// label3.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict3];
// 但是textColor屬性可以與 NSBackgroundColorAttributeName 屬性疊加
// label1.textColor = [UIColor greenColor];
// label2.textColor = [UIColor yellowColor];
// label3.textColor = [UIColor blueColor];
//NSForegroundColorAttributeName 設置字體顏色,取值為 UIColor,默認為黑色
//
// NSDictionary *attrDict1 = @{ NSForegroundColorAttributeName: [UIColor redColor] };
// NSDictionary *attrDict2 = @{ NSForegroundColorAttributeName: [UIColor blueColor] };
// NSDictionary *attrDict3 = @{ NSForegroundColorAttributeName: [UIColor orangeColor] };
//
// label1.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1];
// label2.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2];
// label3.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] };
//
// label1.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict4];
// label2.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict5];
// label3.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] };
// label1.attributedText = [[NSAttributedString alloc] initWithString: ligatureStr attributes: attrDict1];
// NSDictionary *attrDict2 = @{ NSLigatureAttributeName: @(1),
NSFontAttributeName: [UIFont fontWithName: @"futura" size: 30]
};
// label2.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]
};
// label1.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1];
// NSDictionary *attrDict2 = @{ NSKernAttributeName: @(0),
NSFontAttributeName: [UIFont systemFontOfSize: 20]
};
// label2.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2];
// NSDictionary *attrDict3 = @{ NSKernAttributeName: @(10),
NSFontAttributeName: [UIFont systemFontOfSize: 20]
};
// label3.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict3];
5. NSStrikethroughStyleAttributeName
//NSStrikethroughStyleAttributeName 設置刪除線,取值為 NSNumber 對象(整數),枚舉常量 NSUnderlineStyle中的值
// NSUnderlineStyleNone 不設置刪除線
// NSUnderlineStyleSingle 設置刪除線為細單實線
// NSUnderlineStyleThick 設置刪除線為粗單實線
// NSUnderlineStyleDouble 設置刪除線為細雙實線
// NSDictionary *attrDict1 = @{ NSStrikethroughStyleAttributeName: @(NSUnderlineStyleSingle),
NSFontAttributeName: [UIFont systemFontOfSize:20] };
// label1.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1];
// NSDictionary *attrDict2 = @{ NSStrikethroughStyleAttributeName: @(NSUnderlineStyleThick),
NSFontAttributeName: [UIFont systemFontOfSize:20] };
// label2.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2];
// NSDictionary *attrDict3 = @{ NSStrikethroughStyleAttributeName: @(NSUnderlineStyleDouble),
NSFontAttributeName: [UIFont systemFontOfSize:20] };
// label3.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict3];
注意:
雖然使用了枚舉常量,但是枚舉常量的本質仍為整數,所以同樣必須先轉化為 NSNumber 才能使用
刪除線和下划線使用相同的枚舉常量作為其屬性值
目前iOS中只有上面列出的4中效果,雖然我們能夠在頭文件中發現其他更多的取值,但是使用后沒有任何效果
可以看出,中文和英文刪除線的位置有所不同
另外,刪除線屬性取值除了上面的4種外,其實還可以取其他整數值,有興趣的可以自行試驗,取值為 0 - 7時,效果為單實線,隨着值得增加,單實線逐漸變粗,取值為 9 - 15時,效果為雙實線,取值越大,雙實線越粗。
// NSDictionary *attrDict1 = @{ NSStrikethroughStyleAttributeName: @(1),
NSFontAttributeName: [UIFont systemFontOfSize:20] };
// label1.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1];
// NSDictionary *attrDict2 = @{ NSStrikethroughStyleAttributeName: @(3),
NSFontAttributeName: [UIFont systemFontOfSize:20] };
// label2.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2];
// NSDictionary *attrDict3 = @{ NSStrikethroughStyleAttributeName: @(7),
NSFontAttributeName: [UIFont systemFontOfSize:20] };
// _label3.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict3];
6. NSStrikethroughColorAttributeName
//NSStrikethroughColorAttributeName 設置刪除線顏色,取值為 UIColor 對象,默認值為黑色
// NSDictionary *attrDict1 = @{ NSStrikethroughColorAttributeName: [UIColor blueColor],
NSStrikethroughStyleAttributeName: @(1),
NSFontAttributeName: [UIFont systemFontOfSize:20] };
// label1.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1];
// NSDictionary *attrDict2 = @{ NSStrikethroughColorAttributeName: [UIColor orangeColor],
NSStrikethroughStyleAttributeName: @(3),
NSFontAttributeName: [UIFont systemFontOfSize:20] };
// label2.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2];
// NSDictionary *attrDict3 = @{ NSStrikethroughColorAttributeName: [UIColor greenColor],
NSStrikethroughStyleAttributeName: @(7),
NSFontAttributeName: [UIFont systemFontOfSize:20] };
// label3.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict3];
7. NSUnderlineStyleAttributeName
下划線除了線條位置和刪除線不同外,其他的都可以完全參照刪除線設置。
//NSUnderlineStyleAttributeName 設置下划線,取值為 NSNumber 對象(整數),枚舉常量NSUnderlineStyle中的值,與刪除線類似
// NSDictionary *attrDict1 = @{ NSUnderlineStyleAttributeName: @(NSUnderlineStyleSingle),
NSFontAttributeName: [UIFont systemFontOfSize:20] };
// label.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1];
// NSDictionary *attrDict2 = @{ NSUnderlineStyleAttributeName: @(NSUnderlineStyleThick),
NSFontAttributeName: [UIFont systemFontOfSize:20] };
// label.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2];
// NSDictionary *attrDict3 = @{ NSUnderlineStyleAttributeName: @(NSUnderlineStyleDouble),
NSFontAttributeName: [UIFont systemFontOfSize:20] };
// label.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict3];
8. NSUnderlineColorAttributeName
可以完全參照下划線顏色設置
//NSUnderlineColorAttributeName 設置下划線顏色,取值為 UIColor 對象,默認值為黑色
// NSDictionary *attrDict1 = @{ NSUnderlineColorAttributeName: [UIColor blueColor],
NSUnderlineStyleAttributeName: @(NSUnderlineStyleSingle),
NSFontAttributeName: [UIFont systemFontOfSize:20] };
// label1.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1];
// NSDictionary *attrDict2 = @{ NSUnderlineColorAttributeName: [UIColor orangeColor],
NSUnderlineStyleAttributeName: @(NSUnderlineStyleThick),
NSFontAttributeName: [UIFont systemFontOfSize:20] };
// label2.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2];
// NSDictionary *attrDict3 = @{ NSUnderlineColorAttributeName: [UIColor greenColor],
NSUnderlineStyleAttributeName: @(NSUnderlineStyleDouble),
NSFontAttributeName: [UIFont systemFontOfSize:20] };
// label3.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict3];
9. NSStrokeWidthAttributeName
// //NSStrokeWidthAttributeName 設置筆畫寬度,取值為 NSNumber 對象(整數),負值填充效果,正值中空效果
// NSDictionary *attrDict1 = @{ NSStrokeWidthAttributeName: @(-3),
NSFontAttributeName: [UIFont systemFontOfSize:30] };
// label1.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1];
// NSDictionary *attrDict2 = @{ NSStrokeWidthAttributeName: @(0),
NSFontAttributeName: [UIFont systemFontOfSize:30] };
// label2.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2];
// NSDictionary *attrDict3 = @{ NSStrokeWidthAttributeName: @(3),
NSFontAttributeName: [UIFont systemFontOfSize:30] };
// label3.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];
其他屬性簡單說明如下:
// 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 對象