iOS使用NSMutableAttributedString實現富文字小結

coder小鵬發表於2018-01-19

在iOS開發過程中,經常會用到給字型加下劃線,顯示不同顏色和大小的字型等需求,經常遇到這種需求都是直接到百度或者谷歌直接把程式碼粘過來,並沒有做系統的整理,今天剛好有時間,把這部分的內容整理一下,便於後續的開發,閒話不說,接下來就跟著我一起來了解一下__NSMutableAttributedString__吧.

NSAttributedString __NSAttributedString__物件管理適用於字串中單個字元或字元範圍的字串和關聯的屬性集(例如字型和字距)。__NSAttributedString__物件的預設字型是Helvetica 12點,可能與平臺的預設系統字型不同。因此,您可能希望建立適用於您的應用程式的非預設屬性的新字串。您還可以使用__NSParagraphStyle__類及其子類__NSMutableParagraphStyle__來封裝__NSAttributedString__類使用的段落或標尺屬性。

例項化方法和使用方法

例項化方法

使用字串初始化

- (instancetype)initWithString:(NSString *)str;
複製程式碼

程式碼示例

NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:@"測試資料"];
複製程式碼

字典中存放一些屬性名和屬性值

- (instancetype)initWithString:(NSString *)str attributes:(NSDictionary<NSString *,id> *)attrs;
複製程式碼

程式碼示例

NSDictionary *attributedDict = @{
                                     NSFontAttributeName:[UIFont systemFontOfSize:16.0],
                                     NSForegroundColorAttributeName:[UIColor redColor],
                                     NSUnderlineStyleAttributeName:@(NSUnderlineStyleThick)
                                     };
    NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:@"測試資料" attributes:attributedDict];

複製程式碼

使用NSAttributedString初始化,與NSMutableString,NSString類似

- (instancetype)initWithAttributedString:(NSAttributedString *)attrStr;
複製程式碼

使用方法

為某一範圍內的文字設定多個屬性的方法

- (void)setAttributes:(NSDictionary<NSString *,id> *)attrs range:(NSRange)range;
複製程式碼

//程式碼示例

NSString *string = @"測試資料";
NSDictionary *attributedDict = @{
                                     NSFontAttributeName:[UIFont systemFontOfSize:16.0],
                                     NSForegroundColorAttributeName:[UIColor redColor],
                                     NSUnderlineStyleAttributeName:@(NSUnderlineStyleThick)
                                     };
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:string];
    
[attributedString setAttributes:attributedDict range:NSMakeRange(0, string.length)];
複製程式碼

為某一範圍內的文字新增某個屬性的方法

- (void)addAttribute:(NSString *)name value:(id)value range:(NSRange)range;
複製程式碼

//程式碼示例

NSString *string = @"測試資料";
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:string];
    
[attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:NSMakeRange(0, string.length)];

複製程式碼

為某一範圍內的文字新增多個屬性的方法

- (void)addAttributes:(NSDictionary<NSString *,id> *)attrs range:(NSRange)range;
複製程式碼

//程式碼示例

NSString *string = @"測試資料";
NSDictionary *attributedDict = @{
                                     NSFontAttributeName:[UIFont systemFontOfSize:16.0],
                                     NSForegroundColorAttributeName:[UIColor redColor],
                                     NSUnderlineStyleAttributeName:@(NSUnderlineStyleThick)
                                     };
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:string];
    
[attributedString addAttributes:attributedDict range:NSMakeRange(0, string.length)];
複製程式碼

移除某個範圍內的某個屬性的方法

- (void)removeAttribute:(NSString *)name range:(NSRange)range;
複製程式碼

//程式碼示例

 NSString *string = @"測試資料";
 NSDictionary *attributedDict = @{
                                     NSFontAttributeName:[UIFont systemFontOfSize:16.0],
                                     NSForegroundColorAttributeName:[UIColor redColor],
                                     NSUnderlineStyleAttributeName:@(NSUnderlineStyleThick)
                                     };
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:string];
    
[attributedString addAttributes:attributedDict range:NSMakeRange(0, string.length)];
  
    
[attributedString removeAttribute:NSForegroundColorAttributeName range:NSMakeRange(0, string.length)];
複製程式碼

屬性及說明

key 說明
NSFontAttributeName 字型,value是UIFont物件
NSParagraphStyleAttributeName 繪圖的風格(居中,換行模式,間距等諸多風格),value是NSParagraphStyle物件
NSForegroundColorAttributeName 文字顏色,value是UIFont物件
NSLigatureAttributeName 字元連體,value是NSNumber
NSKernAttributeName 字元間隔
NSStrikethroughStyleAttributeName 刪除線,value是NSNumber
NSUnderlineStyleAttributeName 下劃線,value是NSNumber
NSStrokeColorAttributeName 描繪邊顏色,value是UIColor
NSStrokeWidthAttributeName 描邊寬度,value是NSNumber
NSShadowAttributeName 陰影,value是NSShadow物件
NSTextEffectAttributeName 文字效果,value是NSString
NSAttachmentAttributeName 附屬,value是NSTextAttachment 物件
NSLinkAttributeName 連結,value是NSURL or NSString
NSBaselineOffsetAttributeName 基礎偏移量,value是NSNumber物件
NSStrikethroughColorAttributeName 刪除線顏色,value是UIColor
NSObliquenessAttributeName 字型傾斜
NSExpansionAttributeName 字型扁平化
NSVerticalGlyphFormAttributeName 垂直或者水平,value是 NSNumber,0表示水平,1垂直

富文字段落排版格式屬性說明

屬性 說明
lineSpacing 字型的行間距
firstLineHeadIndent 首行縮排
alignment (兩端對齊的)文字對齊方式:(左,中,右,兩端對齊,自然)
lineBreakMode 結尾部分的內容以……方式省略 ( "...wxyz" ,"abcd..." ,"ab...yz")
headIndent 整體縮排(首行除外)
minimumLineHeight 最低行高
maximumLineHeight 最大行高
paragraphSpacing 段與段之間的間距
paragraphSpacingBefore 段首行空白空間
baseWritingDirection 書寫方向(一共三種)
hyphenationFactor 連字屬性 在iOS,唯一支援的值分別為0和1

相關文章