6

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>

これは本当に奇妙に感じます。スタック全体 (レイアウト マネージャー、テキスト コンテナー、テキスト ビュー) を再度セットアップする必要がありますか?

はいの場合、新しいテキスト ビューを開始し、レイアウトの制約も更新する必要がありますが、これには非常にコストがかかります。

4

0 に答える 0