ios html字符串转换attributedString注意事项

今天测试突然告诉我ios这边页面切换的时候有闪屏的现象。排查了很久才发现是html转换attributedString引起的。html转换attributedString的代码如下:

NSMutableAttributedString*attributedString = [[NSMutableAttributedStringalloc]initWithData:[htmlstr dataUsingEncoding:NSUnicodeStringEncoding] options:@{NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType} documentAttributes:nilerror:nil];

这个代码是没有问题,网上很多。原因是这个转换操作应该是耗时操作,虽然时间很短,但是是阻塞了主线程的。 导致界面没有马上加载出来。后面转换完之后再加载出来了导致闪屏。

修改如下:

dispatch_async(dispatch_queue_create(0,0), ^{

//耗时操作。异步进行转换完之后在主线程刷新ui

NSMutableAttributedString*attributedString = [[NSMutableAttributedStringalloc]initWithData:[htmlstr dataUsingEncoding:NSUnicodeStringEncoding]options:@{NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType}documentAttributes:nilerror:nil];

dispatch_async(dispatch_get_main_queue(), ^{

detailLabel.attributedText= attributedString;

});

});


应该将这个操作放在子线程中执行。转换完之后再回主线程刷新ui。闪屏的问题就解决了。



第一次写简书 排版感觉很不习惯。大家见谅。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容