Я использую UICollectionViewFlowLayout. Мои ячейки содержат UILabels, которые различаются по высоте (количеству строк).
Кажется, что лучший способ получить высоту ячейки был бы в подклассе UICollectionViewCell
, потому что именно там я устанавливаю макет и имею доступ к внутреннему размеру моих представлений, НО:
collectionView: layout: sizeForItemAtIndexPath:
вызывается перед методом делегата collectionView: cellForItemAtIndexPath:
, что означает, что мне нужно знать высоту ячейки, прежде чем я получу фактический макет ячейки.
Все, что я придумал до сих пор, кажется слишком сложным, например, начинать с фиксированной высоты ячейки, ссылаться на фактическую высоту после меток в загрузке ячейки и повторно загружать данные с правильной высотой. Есть лучший способ сделать это?
1 ответ
К сожалению нет.
Для элементов с динамическим размером в UICollectionView вам необходимо знать или вычислять размер ячейки до ее создания. Традиционный способ сделать это - сохранить данные для каждой строки в массиве, а затем вычислить размер этих данных в collectionView:layout:sizeForItemAtIndexPath:
.
Например, если у вас есть массив текста для отображения, вы можете сохранить объекты NSString
в массиве, измерить эту строку в collectionView:layout:sizeForItemAtIndexPath:
и вернуть размер. Затем UICollectionView
принимает этот размер и вызывает initWithFrame:
или setFrame:
при настройке просмотра вашей ячейки.
Также неплохо кэшировать эти размеры, если они не меняются часто.
Похожие вопросы
Связанные вопросы
Новые вопросы
ios
iOS - мобильная операционная система, работающая на Apple iPhone, iPod touch и iPad. Используйте этот тег [ios] для вопросов, связанных с программированием на платформе iOS. Используйте связанные теги [target-c] и [swift] для проблем, характерных для этих языков программирования.