8

Mam UICollectionView, gdzie jeden z moich UICollectionViewCells zawiera UITextView. Moim celem jest autosize UICollectionViewCell w celu dopasowania do treści widoku tekstowego.Wymiarowanie UICollectionViewCell, która zawiera UITextView, aby dopasować contentSize

Nadpisałem collectionView: sizeForItemAtIndexPath, ale staram się uzyskać wartość wysokości treści dla widoku tekstu bez tworzenia nieskończonej pętli.

Zazwyczaj na automatyczną zmianę rozmiaru z UITextView, chciałbym zrobić coś jak następuje:

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

Ale aby to zrobić w ciągu sizeForItemAtIndexPath, muszę wskaźnik do UITextView. Aby uzyskać ten wskaźnik, znajduję się wywołanie cellForItemAtIndexPath, ale ponieważ wywołuje sizeForItemAtIndexPath, jest to nieskończona pętla.

Podejrzewam, że brakuje mi sposobu na wstępne powiększenie widoku, a UICollectionView po prostu to respektuje, ale domyślnie przyjmuje wartość 50x50 zdefiniowaną przez UICollectionViewFlowLayout.

Inne (Hack) pomysły, że jestem loathe zrobić:

  • mieć kolejne ukryte UITextView że mogę załadować zawartość do i uzyskać jego wysokość.
  • Implementuj równoważną logikę, aby samodzielnie obliczyć wysokość zawartości.

Dzięki!

Odpowiedz

4

Można ustawić delegata widoku kolekcji, aby być również delegować widoku tekstu, aw textViewDidChange: aktualizacji własność gospodarstwa wysokość up-to-date, obliczoną z textView.textContainer i textView.textContainerInset. Następnie po prostu odwołasz się do tej właściwości w sizeForItemAtIndexPath:. W takim przypadku należy również wykonać pewien rodzaj ponownego ładowania komórki i ewentualnie unieważnić układ za każdym razem, gdy wartość tej właściwości ulegnie zmianie.

Powiązane problemy