今、大きな壁にぶち当たっています…
カスタム画像を含むカスタム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
する (およびセルの高さを維持する) と、ロジックなしでバグが消えるようです... - セルの高さを変更してデキューが後で発生するようにすると、すべてが正常に機能するため、これは明らかにコンテンツの悪魔の組み合わせです。実際、関連する 2 つのセルには、1 つの画像のみを含むテキストが含まれています。
- メソッドを見て
- (void)prepareForReuse
、状態をリセットしようとしましたがUITextView
、これも無駄でした。 UITextView
セルがデキューされるたびに新しいものを再作成すると、問題が解決するようです。
何か案が?NSTextAttachmentContainer
デキューシステムやプロトコルについて何か重要なことを知る必要がありますか?
よろしくお願いします。
編集: この問題を解決するために私が見つけた唯一のことは、それを行うことです:
- (void)prepareForReuse
{
[super prepareForReuse];
// Reset text
_contentTextView.attributedText = nil;
[_contentTextView sizeToFit];
}
ここでのsizeToFit
声明は本当に重要です!