我现在被困在一堵大墙上...
我正在使用UITableViewCell
包含UITextView
自定义NSTextAttachment
图像的自定义。
每个都NSTextAttachment
覆盖
- (CGRect)attachmentBoundsForTextContainer:(NSTextContainer *)textContainer proposedLineFragment:(CGRect)lineFrag glyphPosition:(CGPoint)position characterIndex:(NSUInteger)charIndex;
和
- (UIImage *)imageForBounds:(CGRect)imageBounds
textContainer:(NSTextContainer *)textContainer
characterIndex:(NSUInteger)charIndex;
从NSTextAttachmentContainer
协议。
这里的目标是显示不同大小的图像,并使边界适应可用空间。
我还需要sizeThatFits
在缓存之前使用专用单元格上的语句计算单元格高度。
直到今天,当我尝试列出特定系列的内容时,一切都运行良好。
当将旧单元格出列以显示全新单元格时,我的应用程序只是冻结在[_textView setAttributedString:myAttributedText];
语句中([NSATSTypesetter beginLineWithGlyphAtIndex:]
在堆栈中)。
我只是想尽一切办法避免每次都徒劳地重新创建细胞(这实际上是有效的)。
这是我发现的:
- 即使我“硬编码”返回单元格高度值,问题仍然存在。
- 更改
NSTextAttachment
边界(并保持单元格高度)似乎使错误消失而没有任何逻辑...... - 这显然是内容的恶魔组合,因为如果我更改单元格高度以使出队稍后发生,一切正常。实际上,所涉及的两个单元格都包含仅包含一个图像的文本。
- 我查看了
- (void)prepareForReuse
方法并试图重置UITextView
状态,同样徒劳无功。 UITextView
每次出队时重新创建一个全新的单元格似乎可以解决问题。
任何想法?我需要了解一些关于出队系统或NSTextAttachmentContainer
协议的基本信息吗?
提前谢谢了。
编辑: 我发现解决此问题的唯一方法是:
- (void)prepareForReuse
{
[super prepareForReuse];
// Reset text
_contentTextView.attributedText = nil;
[_contentTextView sizeToFit];
}
声明在sizeToFit
这里真的很重要!