最近浮躁,毛線都沒寫陪每,不斷有人關(guān)注點(diǎn)贊我,必須總結(jié)點(diǎn)干貨了迷守。
項(xiàng)目上要加載html格式的文本犬绒,學(xué)習(xí)一下富文本相關(guān)內(nèi)容。
1.加載HTML標(biāo)簽文本
因?yàn)榻馕龅臄?shù)據(jù)里面有html標(biāo)簽兑凿,就使用下面的代碼把字符串轉(zhuǎn)換成data凯力,初始化時(shí)再用HTML類型,轉(zhuǎn)換為富文本礼华。
NSMutableAttributedString * attrStr = [[NSMutableAttributedString alloc] initWithData:[str dataUsingEncoding:NSUnicodeStringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil];
參數(shù)options里面的字典有三對(duì)key value
文檔類型NSDocumentTypeDocumentAttribute
NSPlainTextDocumentType // 普通文本
NSRTFTextDocumentType // 富文本
NSRTFDTextDocumentType // 帶附件的富文本
NSHTMLTextDocumentType // 這個(gè)可以加載HTML格式的文本
編碼格式NSCharacterEncodingDocumentAttribute
[NSNumber numberWithInt:NSUTF8StringEncoding]; // 不再一一列舉
默認(rèn)NSDefaultAttributesDocumentAttribute
這個(gè)不知道對(duì)應(yīng)的value是什么
2.富文本總結(jié)
這是富文本的所有屬性
屬性Name | 干啥的 | 類型 |
---|---|---|
NSFontAttributeName | 字號(hào) | UIFont 默認(rèn)12 |
NSParagraphStyleAttributeName | 段落樣式 | NSParagraphStyle |
NSForegroundColorAttributeName | 前景色 | UIColor |
NSBackgroundColorAttributeName | 背景色 | UIColor |
NSObliquenessAttributeName | 字體傾斜 | NSNumber |
NSExpansionAttributeName | 字體加粗 | NSNumber 比例 0就是不變 1增加一倍 |
NSKernAttributeName | 字間距 | CGFloat |
NSUnderlineStyleAttributeName | 下劃線 | 1或0 |
NSUnderlineColorAttributeName | 下劃線顏色 | UIColor |
NSStrikethroughStyleAttributeName | 刪除線 | 1或0 |
NSStrikethroughColorAttributeName | 刪除線顏色 | UIColor |
NSStrokeColorAttributeName | same as ForegroundColor | UIColor |
NSStrokeWidthAttributeName | 字體描邊 | CGFloat |
NSLigatureAttributeName | 連筆字 沒看出效果 | 1或0 |
NSShadowAttributeName | 陰影 | NSShawdow |
NSTextEffectAttributeName | 設(shè)置文本特殊效果,目前只有圖版印刷效果可用 | NSString |
NSAttachmentAttributeName | 設(shè)置文本附件,常用插入圖片 | NSTextAttachment |
NSLinkAttributeName | 鏈接 | NSURL (preferred) or NSString |
NSBaselineOffsetAttributeName | 基準(zhǔn)線偏移 | NSNumber |
NSWritingDirectionAttributeName | 文字方向 分別代表不同的文字出現(xiàn)方向等等咐鹤,我想你一定用不到它 - - | @[@(1),@(2)] |
NSVerticalGlyphFormAttributeName | 水平或者豎直文本 在iOS沒卵用,不支持豎版 | 1豎直 0水平 |
解釋一下其中的三個(gè)類型
段落樣式
段落樣式主要改行距圣絮、段距祈惶、首行縮進(jìn)、最大最小行高扮匠、多倍行距等十幾個(gè)屬性捧请,把這些總結(jié)了你就比我更全..
NSMutableParagraphStyle *muParagraph = [[NSMutableParagraphStyle alloc]init];
muParagraph.lineSpacing = 10; // 行距
muParagraph.paragraphSpacing = 20; // 段距
muParagraph.firstLineHeadIndent = 30; // 首行縮進(jìn)
陰影
就三屬性,不用解釋了
NSShadow *shadow = [[NSShadow alloc]init];
shadow.shadowOffset = CGSizeMake(2, 2);
shadow.shadowColor = [UIColor orangeColor];
shadow.shadowBlurRadius = 1;
附件
這個(gè)我的也沒顯示出來(lái)棒搜,想鉆研的看這里http://www.reibang.com/p/5babe8b7983e
NSTextAttachment *attachment=[[NSTextAttachment alloc] initWithData:nil ofType:nil];
UIImage *img=[UIImage imageNamed:@"test.png"];
attachment.image=img;
attachment.bounds=CGRectMake(0, 0, 20, 20);
下面是我的富文本代碼疹蛉,可以copy過(guò)去直接試
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor grayColor];
[self.view addSubview:self.attTV];
//NSFontAttributeName 字號(hào) UIFont 默認(rèn)12
//NSParagraphStyleAttributeName 段落樣式 NSParagraphStyle
//NSForegroundColorAttributeName 前景色 UIColor
//NSBackgroundColorAttributeName 背景色 UIColor
//NSObliquenessAttributeName 字體傾斜 NSNumber
//NSExpansionAttributeName 字體加粗 NSNumber 比例 0就是不變 1增加一倍
//NSKernAttributeName 字間距 CGFloat
//NSUnderlineStyleAttributeName 下劃線 1或0
//NSUnderlineColorAttributeName 下劃線顏色
//NSStrikethroughStyleAttributeName 刪除線 1或0
//NSStrikethroughColorAttributeName 某種顏色
//NSStrokeColorAttributeName same as ForegroundColor
//NSStrokeWidthAttributeName CGFloat
//NSLigatureAttributeName 連筆字 1或0 沒看出效果
//NSShadowAttributeName 陰影 NSShawdow
//NSTextEffectAttributeName 設(shè)置文本特殊效果,取值為 NSString 對(duì)象力麸,目前只有圖版印刷效果可用:
//NSAttachmentAttributeName NSTextAttachment 設(shè)置文本附件,常用插入圖片
//NSLinkAttributeName 鏈接 NSURL (preferred) or NSString
//NSBaselineOffsetAttributeName 基準(zhǔn)線偏移 NSNumber
//NSWritingDirectionAttributeName 文字方向 @[@(1),@(2)] 分別代表不同的文字出現(xiàn)方向等等可款,我想你一定用不到它 - -
//NSVerticalGlyphFormAttributeName 水平或者豎直文本 1豎直 0水平 在iOS沒卵用,不支持豎版
NSParagraphStyle *paragraph = [[NSParagraphStyle alloc]init];
NSMutableParagraphStyle *muParagraph = [[NSMutableParagraphStyle alloc]init];
muParagraph.lineSpacing = 10; // 行距
muParagraph.paragraphSpacing = 20; // 段距
muParagraph.firstLineHeadIndent = 30; // 首行縮進(jìn)
NSMutableAttributedString * attrStr = [[NSMutableAttributedString alloc] initWithData:[@"asdasdflhjlfsaiollzislooa" dataUsingEncoding:NSUnicodeStringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil];
NSRange range = NSMakeRange(0, attrStr.length);
// 設(shè)置字體大小
[attrStr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:30] range:range];
//字間距
[attrStr addAttribute:NSKernAttributeName value:@(2) range:range];
// 字體傾斜
[attrStr addAttribute:NSObliquenessAttributeName value:@(1) range:range];
// 字體加粗
[attrStr addAttribute:NSExpansionAttributeName value:@(0.5) range:range];
// 下劃線
[attrStr addAttribute:NSUnderlineStyleAttributeName value:@(1) range:range];
[attrStr addAttribute:NSUnderlineColorAttributeName value:[UIColor blueColor] range:range];
// 刪除線
[attrStr addAttribute:NSStrikethroughStyleAttributeName value:@(1) range:range];
[attrStr addAttribute:NSStrikethroughColorAttributeName value:[UIColor greenColor] range:range];
// 連體字
[attrStr addAttribute:NSLigatureAttributeName value:@(1) range:range];
// 設(shè)置顏色
[attrStr addAttribute:NSForegroundColorAttributeName value:[UIColor colorWithRed:0.942 green:0.611 blue:0.771 alpha:1.000] range:range];
// 背景色
[attrStr addAttribute:NSBackgroundColorAttributeName value:[UIColor colorWithRed:0.475 green:0.482 blue:0.942 alpha:1.000] range:range];
// stroke
[attrStr addAttribute:NSStrokeColorAttributeName value:[UIColor blueColor] range:range];
[attrStr addAttribute:NSStrokeWidthAttributeName value:@(2) range:range];
// 設(shè)置段落樣式
[attrStr addAttribute:NSParagraphStyleAttributeName value:muParagraph range:range];
// 文本方向
[attrStr addAttribute:NSVerticalGlyphFormAttributeName value:@(1) range:range];
[attrStr addAttribute:NSWritingDirectionAttributeName value:@[@(2),@(3)] range:range];
// 陰影
NSShadow *shadow = [[NSShadow alloc]init];
shadow.shadowOffset = CGSizeMake(2, 2);
shadow.shadowColor = [UIColor orangeColor];
shadow.shadowBlurRadius = 1;
[attrStr addAttribute:NSShadowAttributeName value:shadow range:range];
// 鏈接
[attrStr addAttribute:NSLinkAttributeName value:[NSURL URLWithString:@"http://www.reibang.com/p/8f49c9c99b21"] range:range];
// 文字中加圖片
NSTextAttachment *attachment=[[NSTextAttachment alloc] initWithData:nil ofType:nil];
UIImage *img=[UIImage imageNamed:@"test.png"];
attachment.image=img;
attachment.bounds=CGRectMake(0, 0, 20, 20);
[attrStr addAttribute:NSAttachmentAttributeName value:attachment range:range];
// 基準(zhǔn)線偏移
[attrStr addAttribute:NSBaselineOffsetAttributeName value:@(50) range:range];
self.attTV.attributedText = attrStr;
}
我的效果圖很磕饞
3.TextView行距字間距的問(wèn)題
同時(shí)遇到一個(gè)需求克蚂,TextView輸入的內(nèi)容的行距字間距進(jìn)行調(diào)整闺鲸,這樣輸入一大段字會(huì)清楚一點(diǎn)。
網(wǎng)上的方法是在- (void)textViewDidChange:(UITextView *)textView代理方法中根據(jù)text生成對(duì)應(yīng)格式的attributedText
- (void)textViewDidChange:(UITextView *)textView{
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.lineSpacing = 16;// 字體的行間距
NSDictionary *attributes = @{
NSFontAttributeName:[UIFont systemFontOfSize:17],
NSParagraphStyleAttributeName:paragraphStyle,
NSKernAttributeName : @(1.4f)
};
textView.attributedText = [[NSAttributedString alloc] initWithString:textView.text attributes:attributes];
}
但是中文輸入法的時(shí)候就會(huì)懵逼陨舱,會(huì)同時(shí)打出英文
最后沒辦法翠拣,改成可視化的textView,調(diào)整行距的屬性游盲,字間距就沒辦法了误墓,誰(shuí)有好辦法可以教教我
結(jié)束... 看在苦勞點(diǎn)個(gè)贊??