Как заменить текстовое хранилище NSLayoutManager
Я пытаюсь создать ячейку табличного представления, которая имеет 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];
Это работает до сих пор, что новый текст будет отображаться правильно. Но когда я снова использую ячейку (добавляя менеджер макета в другое хранилище текста) и получая размер представления текста, с помощью…
[self.myTextView systemLayoutSizeFittingSize:...]
... получить неправильный размер. Посмотрев на свойства текстового представления, я понял, что он все еще указывает на неправильное хранение текста.
self.myLayoutManager.textStorage -> <new text storage>
self.myTextView.textStorage -> <old text storage>
Это действительно странно. Нужно ли заново настраивать весь стек (менеджер макетов, контейнер текста, просмотр текста)?
Если да, мне нужно будет инициировать новое представление текста, а также обновить ограничения макета, что будет довольно дорого.