调整包含UITextView以适合contentSize的UICollectionViewCell

Joh*_*nan 8 cocoa-touch uitextview ios uicollectionview uicollectionviewcell

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

我已经覆盖了collectionView:sizeForItemAtIndexPath,但我很难获得文本视图的内容高度值而不创建无限循环.

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

CGRect frame = textView.frame;
frame.size.height = textView.contentSize.height;
textView.frame = frame;
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 有另一个隐藏的UITextView,我可以加载内容并获得它的高度.
  • 实现等效逻辑以自己计算内容高度.

谢谢!

小智 4

您可以将集合视图的委托设置为文本视图的委托,并在更新属性时保存根据和textViewDidChange:计算得出的最新高度。然后您只需在 中引用此属性即可。在这种情况下,您还需要对单元格进行某种类型的重新加载,并可能在每次该属性的值即将更改时使布局失效。textView.textContainertextView.textContainerInsetsizeForItemAtIndexPath: