4

今、大きな壁にぶち当たっています…

カスタム画像を含むカスタムUITableViewCellを使用しています。UITextViewNSTextAttachment

それぞれ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する (およびセルの高さを維持する) と、ロジックなしでバグが消えるようです...
  • セルの高さを変更してデキューが後で発生するようにすると、すべてが正常に機能するため、これは明らかにコンテンツの悪魔の組み合わせです。実際、関連する 2 つのセルには、1 つの画像のみを含むテキストが含まれています。
  • メソッドを見て- (void)prepareForReuse、状態をリセットしようとしましたがUITextView、これも無駄でした。
  • UITextViewセルがデキューされるたびに新しいものを再作成すると、問題が解決するようです。

何か案が?NSTextAttachmentContainerデキューシステムやプロトコルについて何か重要なことを知る必要がありますか?

よろしくお願いします。

編集: この問題を解決するために私が見つけた唯一のことは、それを行うことです:

- (void)prepareForReuse
{
    [super prepareForReuse];

    // Reset text
    _contentTextView.attributedText = nil;
    [_contentTextView sizeToFit];
}

ここでのsizeToFit声明は本当に重要です!

4

0 に答える 0