如何替换NSLayoutManager的文本存储

时间:2015-01-28 20:29:53

标签: ios uitextview textkit nslayoutmanager nstextstorage

我正在尝试构建一个具有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>

这感觉很奇怪。我是否需要再次设置整个堆栈(布局管理器,文本容器,文本视图)?

如果是,我需要启动一个新的文本视图,并更新布局约束,这将非常昂贵。

0 个答案:

没有答案