美文网首页
富文本问题 NSMutableAttributedString,

富文本问题 NSMutableAttributedString,

作者: 小_梦 | 来源:发表于2021-07-16 15:27 被阅读0次

需求

接口返回html角标的字符串,前端转化成NSMutableAttributedString去渲染

"text": "<font color=#6B462E >您有</font><font color=#FB4E44 >18</font><font color=#6B462E >张券可使用</font>",
  1. 这样的需求一般都是文案比较短,但是变化频率高,且带样式
  2. app端需要转换成NSMutableAttributedString然后使用UILabel或者UIButton显示

遇到的坑

  1. 方案1如下
NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithData:[html dataUsingEncoding:NSUnicodeStringEncoding]
                                                                       options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType}
                                                            documentAttributes:nil
                                                                         error:nil];
        // 必须设置对其方式,否则没有按照UILabel设置的对齐方式显示,而是居左显示
        NSMutableParagraphStyle *paragrahStyle = [[NSMutableParagraphStyle alloc] init];
        [paragrahStyle setAlignment:self.textAlignment];
        [attrStr addAttributes:@{NSFontAttributeName:font ? : self.font,
                                 NSParagraphStyleAttributeName:paragrahStyle,
                                 NSBaselineOffsetAttributeName:@(NSUnderlineStyleSingle)
                                }
                         range:NSMakeRange(0, attrStr.length)];
  • 备注1:以上方案需要放在异步线程中,如果不放在异步线程中会导致主线程卡死。
  • 备注2:在异步线程中转化完成后,进入主线程给.attributedText赋值,绘制界面会滞后。
  • 备注3: 自己写代码截取html标签转化成NSMutableAttributedString,不会阻塞主线程。

.attributedText赋值显示多行问题

  1. UILabel、UIButton:不支持多段的富文本多行,单行支持
  2. 多段的富文本使用UITextView,UITextView可以完美解决上面问题
  • 多段是指这个富文本中不只添加了一类属性,比如一些文案是红色、一些文案是黑色字体

相关文章

网友评论

      本文标题:富文本问题 NSMutableAttributedString,

      本文链接:https://www.haomeiwen.com/subject/atzvpltx.html