8

UICollectionView があり、UICollectionViewCells の 1 つに 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

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

于 2014-07-05T04:32:45.403 に答える