富文本问题 NSMutableAttributedString,

2021-07-16  本文已影响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)];

.attributedText赋值显示多行问题

  1. UILabel、UIButton:不支持多段的富文本多行,单行支持
  2. 多段的富文本使用UITextView,UITextView可以完美解决上面问题
上一篇 下一篇

猜你喜欢

热点阅读