今天测试突然告诉我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。闪屏的问题就解决了。
第一次写简书 排版感觉很不习惯。大家见谅。
网友评论