在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 |