2013-09-13 6 views
5

Я использую UICollectionViewFlowLayout. Мои ячейки содержат UILabels, которые отличаются по высоте (количество строк).Где определить высоту динамического размера UICollectionViewCell?

кажется, что лучший способ получить высоту ячейки будет в подклассе UICollectionViewCell, потому что именно там я установить расположение и иметь доступ к внутренним размерам моих взглядов, НО:

collectionView: layout: sizeForItemAtIndexPath: называется перед методом делегата collectionView: cellForItemAtIndexPath:, что означает, что мне нужно знать высоту ячейки, прежде чем у меня будет фактическое расположение ячейки.

Все, что я придумал до сих пор, кажется слишком сложным, например, начиная с высоты фиксированной ячейки, ссылаясь на фактическую высоту после меток в нагрузке на ячейку и снова загружая данные с правильной высотой. Есть лучший способ сделать это?

+0

Вы могли найти лучший метод для этого? Если да, не могли бы вы сообщить мне об этом? Я тоже сталкиваюсь с той же проблемой. – user805981

ответ

3

К сожалению, нет.

Для элементов динамического размера в UICollectionView вам необходимо знать или вычислять размер ячейки до ее создания. Традиционный способ сделать это - сохранить данные для каждой строки в массиве, а затем вычислить размер этих данных в collectionView:layout:sizeForItemAtIndexPath:.

Например, если у вас есть массив текста для отображения, вы можете сохранить объекты NSString в массиве, измерить эту строку в collectionView:layout:sizeForItemAtIndexPath: и вернуть размер. UICollectionView затем берет этот размер и вызывает initWithFrame: или setFrame: при настройке вида сотовой ячейки.

Также неплохо кэшировать эти размеры, если они не меняются часто.

+10

Это действительно смешно и приводит к совершенно отвратительному коду для любых сложных компоновки ячеек. Поразительно, что у Apple по-прежнему нет лучшего API для такого основного компонента. –

+0

@AlexB для Android есть всего лишь 1 строка кода 'wrap_content', а затем соглашаться на все, Apple просто отстой все нужно вычислить вручную – ken

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