8

私はUICollectionViewを持っています。ここで私のUICollectionViewCellの1つにUITextViewが含まれています。私の目標は、テキストビューの内容に合わせてUICollectionViewCellを自動化することです。contentSizeに合うように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

また、コレクションビューのデリゲートをテキストビューのデリゲートに設定し、textViewDidChange:には、textView.textContainertextView.textContainerInsetから計算された最新の高さを保持するプロパティを更新できます。次に、このプロパティをsizeForItemAtIndexPath:で参照するだけです。この場合、そのプロパティの値を変更しようとするたびに、何らかのタイプのセルの再読み込みやレイアウトの無効化が必要になることもあります。

関連する問題