8

我有一個UICollectionView,那裏有我UICollectionViewCells的一個包含一個UITextView一個UICollectionViewCell。我的目標是自動化UICollectionViewCell以適應文本視圖的內容。漿紗包含的UITextView,以適應contentSize

我已重寫的CollectionView:sizeForItemAtIndexPath,但我掙扎着爬在文本視圖中的內容高度值,而無需創建一個無限循環。

通常爲AutoSize一個UITextView,我會做類似如下:

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

但要做到這內sizeForItemAtIndexPath,我需要一個指針的UITextView。要獲取該指針,我發現自己打電話cellForItemAtIndexPath,但由於調用sizeForItemAtIndexPath它是一個無限循環。

我懷疑我缺少一種方法來預先設置視圖的大小,並讓UICollectionView只是尊重它,但它似乎默認爲UICollectionViewFlowLayout定義的50x50值。我很討厭做

其他(黑客)的想法:

  • 有另一個隱藏的UITextView,我可以加載內容納入,並得到它的高度。
  • 實現等價邏輯來計算自己的內容高度。

謝謝!

回答

4

您可以將收集視圖的代理設置爲文本視圖的代理,並在textViewDidChange:中更新一個屬性,該屬性包含從textView.textContainertextView.textContainerInset計算得出的最新高度。然後,您只需在sizeForItemAtIndexPath:中引用此屬性。在這種情況下,每次該屬性的值將要更改時,您還需要執行單元格的某種重新裝入操作,並可能會佈局失效。