我有一个表格视图,其中包含多种类型的单元格。其中之一是带有TextView的单元格,在这个文本视图中,我必须从数据中呈现NSAttributedString。根据Apple documentation,必须在主线程上执行此操作:
我这样滚动我的tableView:
有没有其他方法可以创建一个带属性的字符串而不会出现这些问题?
但是以这种方式呈现会使表格视图滚动出现卡顿,并且还会影响自动布局。这是我的单元格内部的代码。HTML导入程序不应从后台线程调用(即选项字典包括值为NSHTMLTextDocumentType的NSDocumentTypeDocumentAttribute)。它将尝试与主线程同步,失败并超时。在主线程中调用它可以运行(但如果HTML包含对外部资源的引用,则仍可能超时,应尽量避免)。HTML导入机制旨在实现类似于Markdown的东西(即文本样式、颜色等),而不是用于一般的HTML导入。
dispatch_async(dispatch_get_main_queue(), ^{
NSString* htmlString = [NSString stringWithFormat:@"<div style=\"font-family:%@; font-size:%dpx; color:#08080d;\">%@</div>",fontNameBase, 16,txt];
htmlString = [Utility replaceHtmlCodeEntities:htmlString];
NSData* tempData = [htmlString dataUsingEncoding:NSUnicodeStringEncoding];
NSAttributedString *attributedString = [[NSAttributedString alloc] initWithData:tempData options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType} documentAttributes:nil error:nil];
self.textViewMsg.attributedText = txt;
});
我这样滚动我的tableView:
-(void)reloadAndScroll{
[self.tableChat reloadData];
long lastRowNumber = [_tableChat numberOfRowsInSection:0] - 1;
if (lastRowNumber > 0) {
NSIndexPath* indexPath = [NSIndexPath indexPathForRow:lastRowNumber inSection:0];
[_tableChat scrollToRowAtIndexPath:indexPath
atScrollPosition:UITableViewScrollPositionBottom animated:NO];
}
}
有没有其他方法可以创建一个带属性的字符串而不会出现这些问题?