调整包含 UITextView 的 UICollectionViewCell 以适合 contentSize

Posted

技术标签:

【中文标题】调整包含 UITextView 的 UICollectionViewCell 以适合 contentSize【英文标题】:Sizing a UICollectionViewCell that contains UITextView to fit the contentSize 【发布时间】:2013-07-15 19:28:25 【问题描述】:

我有一个 UICollectionView,其中一个 UICollectionViewCells 包含一个 UITextView。我的目标是自动调整 UICollectionViewCell 以适应文本视图的内容。

我已经覆盖了collectionView:sizeForItemAtIndexPath,但我在不创建无限循环的情况下努力获取文本视图的内容高度值。

通常要自动调整 UITextView 的大小,我会执行以下操作:

CGRect frame = textView.frame;
frame.size.height = textView.contentSize.height;
textView.frame = frame;

但要在 sizeForItemAtIndexPath 中执行此操作,我需要一个指向 UITextView 的指针。为了得到那个指针,我发现自己调用了 cellForItemAtIndexPath,但是因为调用了 sizeForItemAtIndexPath,所以它是一个无限循环。

我怀疑我错过了一种预先调整视图大小并让 UICollectionView 尊重这一点的方法,但它似乎默认为 UICollectionViewFlowLayout 定义的 50x50 值。

我讨厌做的其他(黑客)想法:

有另一个隐藏的 UITextView,我可以将内容加载到其中并获取它的高度。 实现等效逻辑以自行计算内容高度。

谢谢!

【问题讨论】:

【参考方案1】:

您可以将集合视图的代理设置为文本视图的代理,并在textViewDidChange: 中更新一个属性,该属性包含根据textView.textContainertextView.textContainerInset 计算得出的最新高度。然后你只需在sizeForItemAtIndexPath: 中引用这个属性。在这种情况下,您还希望在每次该属性的值即将更改时重新加载单元格并可能使布局失效。

【讨论】:

以上是关于调整包含 UITextView 的 UICollectionViewCell 以适合 contentSize的主要内容,如果未能解决你的问题,请参考以下文章

调整 UITextView 和包含它的部分而不过度绘制下一个 tableview 部分

UITextView 调整宽度以适合文本

如何根据内容调整 UITextView 的大小?

在 UITableViewCell 中调整 UITextView 的大小时会发生奇怪的事情

在 UIScrollView 中自动调整 UITextView 的大小

调整表格视图单元格以显示 UITextView 和 UIWebView