UITextView を持つテーブル ビュー セルを作成しようとしています。このテーブル ビュー セルを再利用するために、新しいテキスト ストレージをレイアウト マネージャーに設定します。ただし、レイアウト マネージャーを新しいテキスト ストレージに追加しても、テキスト ビューのテキスト ストレージは変更されません。
レイアウト マネージャー、テキスト コンテナー、テキスト ビューは次のように設定されます。
_myLayoutManager = [[NSLayoutManager alloc] init];
_myTextContainer = [[NSTextContainer alloc] init];
[_myLayoutManager addTextContainer:_myTextContainer];
_myTextView = [[UITextView alloc] initWithFrame:self.bounds
textContainer:_myTextContainer];
テーブル ビュー セルを「構成」するときに、レイアウト マネージャーを新しいテキスト ストレージに追加します。
MyTextStorage *textStorage = ...
[textStorage addLayoutManager:self.myLayoutManager];
これは今のところ機能しており、新しいテキストが正しく表示されます。しかし、セルを再利用して (レイアウト マネージャーを別のテキスト ストレージに追加して)、テキスト ビューのサイズを取得すると、…</p>
[self.myTextView systemLayoutSizeFittingSize:...]
… 間違ったサイズを取得します。テキスト ビューのプロパティを調べたところ、まだ間違ったテキスト ストレージを指していることがわかりました。
self.myLayoutManager.textStorage -> <new text storage>
self.myTextView.textStorage -> <old text storage>
これは本当に奇妙に感じます。スタック全体 (レイアウト マネージャー、テキスト コンテナー、テキスト ビュー) を再度セットアップする必要がありますか?
はいの場合、新しいテキスト ビューを開始し、レイアウトの制約も更新する必要がありますが、これには非常にコストがかかります。