4

我现在被困在一堵大墙上...

我正在使用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这里真的很重要!

4

0 回答 0