8

我有一个 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,我可以将内容加载到其中并获取它的高度。
  • 实现等效逻辑以自行计算内容高度。

谢谢!

4

1 回答 1

4

您可以将集合视图的委托设置为文本视图的委托,并更新一个属性,该属性包含从andtextViewDidChange:计算的最新高度。然后您只需在. 在这种情况下,您还希望在每次该属性的值即将更改时对单元格进行某种类型的重新加载,并可能使布局失效。textView.textContainertextView.textContainerInsetsizeForItemAtIndexPath:

于 2014-07-05T04:32:45.403 回答