我正在尝试使用大小调整视图在集合视图中创建动态单元格大小。
一切正常如果我使用文字,但是当我改变归因文本时,一切都会崩溃并烧毁。
我有一个带有UIlabel的nib文件
let sizingView = Bundle.main.loadNibNamed("MyNib", owner: self, options: nil)?[0] as? MyCell
然后我将动态文本发送到单元格
sizingView.configureCell(promo: promo)
在单元格类中
func configureCell(promo:CMSPromotion) {
if let mainAttributedString = promo.content?.htmlAttributedString() {
mainText.attributedText = mainAttributedString
}
}
我的HTML归因于
// Convert HTML to NSAttributedString
func htmlAttributedString() -> NSMutableAttributedString? {
guard let data = self.data(using: String.Encoding.utf16, allowLossyConversion: false) else { return nil }
guard let html = try? NSMutableAttributedString(
data: data,
options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
documentAttributes: nil) else { return nil }
return html
}
我可以在所有Google中找到的setSizeHasBeenSet的唯一引用是_UIFlowLayoutItem,但我不明白为什么这是相关的。
我看到了类似的问题 UICollectionView sizeForItemAt IndexPath但经过检查,它并不重复,因为提供的代码还有其他问题。
答案 0 :(得分:0)
我的问题有一个解决方法。我猜这与计算过重有关,这就是为什么它适用于普通文本但不适用于属性文本
我在加载我的集合视图之前预先计算后台线程中的所有单元格高度,而不是 sizeForItemAtIndexPath 我生锈从数组返回预期高度
func collectionView(_ collectionView : UICollectionView,layout collectionViewLayout:UICollectionViewLayout,sizeForItemAtIndexPath indexPath:IndexPath) -> CGSize {