8

Ich habe eine UICollectionView, wo eine meiner UICollectionViewCells eine UITextView enthält. Mein Ziel ist es, die UICollectionViewCell auf den Inhalt der Textansicht anzupassen.Größe einer UICollectionViewCell, die UITextView enthält, um die contentSize anzupassen

Ich habe collectionView: sizeForItemAtIndexPath überschrieben, aber ich habe Mühe, auf den Inhalt Höhe Wert für die Textansicht zu erhalten, ohne eine Endlosschleife zu erstellen.

typischerweise ein UITextView autosize, ich etwas wie das folgende tun würde:

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

Aber das zu tun, dass innerhalb sizeForItemAtIndexPath ich einen Zeiger auf die UITextView benötigen. Um diesen Zeiger zu bekommen, finde ich mich cellForItemAtIndexPath, aber da das sizeForItemAtIndexPath aufruft, ist es eine Endlosschleife.

Ich vermute, ich vermisse eine Möglichkeit, die Ansicht im Voraus Größe und haben die UICollectionView nur respektieren, aber es scheint standardmäßig auf die 50x50 Wert, der UICollectionViewFlowLayout definiert.

Andere (Hack) Ideen, die ich verabscheue ich zu tun:

  • Haben Sie eine andere versteckte UITextView, dass ich den Inhalt in laden können und bekommen es Höhe ist.
  • Implementieren Sie die entsprechende Logik, um die Inhaltshöhe selbst zu berechnen.

Vielen Dank!

Antwort

4

Sie könnten der Sammlung Ansicht des Delegierten setzen auch die Textansicht des Delegierten sein, und in textViewDidChange: Update eine Eigenschaft, eine up-to-date Höhe von der textView.textContainer und textView.textContainerInset berechnet halten. Dann referenzieren Sie einfach diese Eigenschaft in sizeForItemAtIndexPath:. In diesem Fall sollten Sie auch eine Art Neuladen der Zelle durchführen und möglicherweise jedes Mal, wenn sich der Wert dieser Eigenschaft ändert, eine Layout-Invalidierung vornehmen.

Verwandte Themen