2013-08-08 3 views
2

Я пытаюсь реализовать представление коллекции с ячейками с динамической высотой.Динамическая высота UICollectionViewCell в зависимости от шрифта UITextView lineHeight

Некоторые из видовых коллекции клеток содержат UITextView, то UITextViews имеет их высоту настроено так:

[textViewHeightConstraint setConstant: numberOfRowsToDisplay * [[textView font] lineHeight]]; 

TextView является подвидом из другой точки зрения, которая в определенной .xib, эта точка зрения является XIB добавляется как поднабор ячейки, когда ячейка отменяется (когда вызывается collectionView: cellForItemAtIndexPath:).

Но мне нужно вернуть высоту ячейки в методе «collectionView: sizeForItemAtIndexPath:», где экземпляр ячейки недоступен, поэтому я не могу получить доступ к текстуру: свойство [[textView font] lineHeight].

Как я могу это решить?

PS: текстовое поле пуста, поэтому высота не зависит от NSString, на которую я могу вызвать метод sizeWithFont: и я не могу жестко кодировать высоту текста. «NumberOfRowsToDisplay» извлекается во время выполнения, а шрифт textView также не является жестко запрограммированным.

EDIT: я уже пытался позвонить "dequeueReusableCellWithReuseIdentifier: forIndexPath:" в "CollectionView: sizeForItemAtIndexPath:" метод, он создает бесконечный цикл, как если бы я звонил "CollectionView: cellForItemAtIndexPath:".

+0

Вы не должны пытаться получить доступ к ячейке. Вы должны запросить источник данных для значения numberOfRowsToDisplay для конкретного indexPath. Ячейки предназначены для отображения только данных, а не для их доставки. – rdelmar

+0

Да, вы не можете произвольно деактивировать ячейки для вычисления высот, как вы можете, с помощью 'UITableView'. Очень надоедливый. –

+0

@rdelmar это не «numberOfRowsToDisplay», который трудно получить, это строкаHight из textView, textView находится в ячейке, поэтому я не могу получить доступ к свойству шрифта. – LiohAu

ответ

-1

Вам необходимо установить контроллер вида в качестве делегата для класса макета потока.

Смотрите здесь: UICollectionViewDelegateFlowLayout Protocol Reference

+1

Контроллер представления уже является делегатом класса макета, проблема в том, что мне нужен экземпляр ячейки, чтобы узнать высоту ячейки, а системе нужна высота для создания ячейки ... = порочный круг – LiohAu

Смежные вопросы