1. 程式人生 > >NSMutableAttributedString文字樣式設定以及富文字展示

NSMutableAttributedString文字樣式設定以及富文字展示

在專案開發的過程中或多或少都有遇到過在一段文字中某個字串需要新增下劃線、顏色不同於其他文字、背景色、刪除線、行間距等等需求。而NSMutableAttributedString可以幫助你實現這些需求

通過以下方法初始化NSMutableAttributedString
- (instancetype)initWithString:(NSString *)str;
通過以下程式碼可以新增所需要的樣式
- (void)addAttribute:(NSAttributedStringKey)name value:(id)value range:(NSRange)range;
通過以下程式碼可以移除已新增的樣式
- (void)
removeAttribute:(NSAttributedStringKey)name range:(NSRange)range;

都可設定哪些樣式

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 設定基線偏移值,取值為 NSNumberfloat),正值上偏,負值下偏 NSObliquenessAttributeName 設定字形傾斜度,取值為 NSNumberfloat),正值右傾,負值左傾 NSExpansionAttributeName 設定文字橫向拉伸屬性,取值為 NSNumberfloat),正值橫向拉伸文字,負值橫向壓縮文字 NSWritingDirectionAttributeName 設定文字書寫方向,從左向右書寫或者從右向左書寫 NSVerticalGlyphFormAttributeName 設定文字排版方向,取值為 NSNumber 物件(整數),0 表示橫排文字,1 表示豎排文字 NSLinkAttributeName 設定連結屬性,點選後呼叫瀏覽器開啟指定URL地址 NSAttachmentAttributeName 設定文字附件,取值為NSTextAttachment物件,常用於文字圖片混排 NSParagraphStyleAttributeName 設定文字段落排版格式,取值為 NSParagraphStyle 物件

程式碼展示:

    NSRange range = NSMakeRange(0, title.length);
    NSMutableAttributedString *attribtStr = [[NSMutableAttributedString alloc]initWithString:title];
    //設定下劃線
    [attribtStr addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInteger:NSUnderlineStyleSingle] range:range];
    //字型顏色
    [attribtStr addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:range];
    label.attributedText = attribtStr;

不一定要用UILabel展示,UITextView和UITextField都可以展示

如果需要展示的字串是帶有HTML標籤的富文字也可以同NSMutableAttributedString進行展示,程式碼如下:

NSString *path = [[NSBundle mainBundle] pathForResource:@"html" ofType:@"txt"];
NSString *content = [[NSString alloc] initWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
    //修改html中圖片的寬度
content = [NSString stringWithFormat:@"<head><style>img{width:%f !important;height:auto}</style></head>%@",CGRectGetWidth(self.view.frame),content];
    //設定富文字
NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithData:[content dataUsingEncoding:NSUnicodeStringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil];
self.textView = [[UITextView alloc]initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.frame) - 5, CGRectGetHeight(self.view.frame))];
[self.textView setBackgroundColor:[UIColor whiteColor]];
self.textView.editable = NO;
self.textView.attributedText = attrStr;
[self.view addSubview:self.textView];