iOS AttributedString 富文字
阿新 • • 發佈:2019-01-31
前言
AttributedString可以分為NSAttributedString和NSMutableAttributedString兩種。在使用中通過將AttributedString賦值給控制元件的 attributedText 屬性來新增文字樣式。UILabel、UITextField和UITextView,都可以使用該屬性。
1、設定常規屬性
NSString *str = @"大海因為有了波瀾所以更加雄偉壯闊,人生因為有了遺憾所以更加珍惜懂得。倘若未曾有過遺憾的痛。今天也不至於學會懂。倘若未曾有過遺憾的傷,今天也不至於堅強。誰今天的堅強,不是用曾經的那些憾缺構築起來的成長。" ;
//建立NSMutableAttributedString
NSMutableAttributedString *attStr = [[NSMutableAttributedString alloc] initWithString:str];
//設定字型大小和指定範圍
[attStr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:30.0f] range:NSMakeRange(0, 2)];
//設定文字顏色
[attStr addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0, 2)];
//設定文字背景色
[attStr addAttribute:NSBackgroundColorAttributeName value:[UIColor greenColor] range:NSMakeRange(0, 2)];
//新增下劃線
[attStr addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInteger:NSUnderlineStyleSingle] range:NSMakeRange(0, 2 )];
//設定字元之間的間距
[attStr addAttribute:NSKernAttributeName value:@(5) range:NSMakeRange(0, str.length-1)];
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 20, self.view.frame.size.width-20, 20)];
label.attributedText = attStr; //設定label的富文字
label.numberOfLines = 0; //自動換行
[label sizeToFit]; //label高度自適應
[self.view addSubview:label];
2、設定段落屬性
NSString *str = @"大海因為有了波瀾所以更加雄偉壯闊,人生因為有了遺憾所以更加珍惜懂得。\n倘若未曾有過遺憾的痛。今天也不至於學會懂。\n倘若未曾有過遺憾的傷,今天也不至於堅強。\n誰今天的堅強,不是用曾經的那些憾缺構築起來的成長。";
//建立NSMutableAttributedString
NSMutableAttributedString *attStr = [[NSMutableAttributedString alloc] initWithString:str];
//設定段落的樣式
NSMutableParagraphStyle *paragraph = [[NSMutableParagraphStyle alloc] init];
//設定行間距
paragraph.lineSpacing = 10;
//設定段落間距
paragraph.paragraphSpacing = 20.0f;
//設定對齊方式
paragraph.alignment = NSTextAlignmentLeft;
//設定段落首行縮排
paragraph.firstLineHeadIndent = 30;
//設定文字全部縮排
paragraph.headIndent = 30;
//新增段落設定
[attStr addAttribute:NSParagraphStyleAttributeName value:paragraph range:NSMakeRange(0, str.length)];
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 20, self.view.frame.size.width-20, 20)];
label.attributedText = attStr; //設定label的富文字
label.numberOfLines = 0; //自動換行
[label sizeToFit]; //label高度自適應
[self.view addSubview:label];