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。闪屏的问题就解决了。



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


你可能感兴趣的:(ios html字符串转换attributedString注意事项)