Как сделать UICollectionViewCell подходящим для его подзонов (с помощью Auto Layout)

Как изменить размер UICollectionViewCell на основе размера его подзонов, используя Auto Layout?

Мой UICollectionViewCell имеет только один вид в своем contentView . Это пользовательский подкласс UIView который автоматически изменяет размеры, чтобы соответствовать всем его представлениям, используя Auto Layout. Он также правильно реализует -intrinsicContentSize . Однако UICollectionView , а точнее его расположение, похоже, не заботятся об этом.

Я использую UICollectionViewFlowLayout и UICollectionViewFlowLayout :

  • Оставляя itemSize по умолчанию. Это дает мне ячейки размером 50 х 50.
  • Реализация метода делегата -collectionView:layout:sizeForItemAtIndexPath: Однако, когда этот метод вызывается, ячейки (очевидно) еще не появились на экране и не были обновлены системой автоматического макета.

Есть ли способ изменить размер моих ячеек на основе их подзонов, используя стандартные классы Apple? Или мне нужно реализовать свой собственный подкласс UICollectionViewLayout или что-то еще?

3 Solutions collect form web for “Как сделать UICollectionViewCell подходящим для его подзонов (с помощью Auto Layout)”

Вы пробовали это:

 [self.view layoutIfNeeded]; [UIView animateWithDuration:0.5 animations:^{ constraintConstantForWidth.constant = subviews.size.width; constraintConstantForHeight.constant = subviews.size.height; [self.view layoutIfNeeded]; }]; 

и сделать приоритет ограничения (низкий = 250)

Я думаю, что эту проблему мы можем решить с помощью замены константы ограничения.

я использовал

 - (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath { if (indexPath.row == 0) { UIButton *button = (UIButton *)[cell viewWithTag:2]; CGRect frame = cell.frame; frame.size.width = button.frame.size.width; cell.frame = frame; } } 

и смог изменить размер моей ячейки на основе ширины кнопки subview в небольшом тестовом приложении.

Удостоверьтесь, что теги в ваших представлениях больше 0, потому что если вы используете 0, он просто возвращает вам содержимое. Помимо этого, вы должны туда попасть

Попробуйте collectionView: layout: sizeForItemAtIndexPath:

 - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { return self.view.frame.size; } 
  • Независимая прокрутка для каждого раздела UICollectionView?
  • Что такое ограничение UIView-Encapsulated-Layout-Width?
  • Использование с UICollectionViewFlowLayout с UIDynamics
  • Сообщение об ошибке UICollectionViewLayout «заблокировано»
  • Проведите по нескольким таблицам
  • Как подключить UICollectionViewController в UIContainerView
  • Изменение атрибутов UICollectionViewCell в файле didSelectItemAtIndexPath
  • На iOS вы можете использовать UICollectionViewFlowLayout для получения вертикальной раскладки столбцов?
  • Выравнивание по левому краю ячеек в UICollectionView
  • ios 8 Swift - TableView со встроенным CollectionView
  • didSelectItemAtIndexPath не вызывается с несколькими видами коллекции на одном экране
  • Interesting Posts

    ESC POS распечатать изображение PNG

    Начать действие с помощью кнопки, когда она уже идет.

    Запуск установки пакета из плагина Xcode cocoapods

    Phonegap 3.0+ Как распечатать документ и / или отправить его на другое устройство по электронной почте / airdrop / etc без использования Mobile Safari

    Плагин Cordova Push: onNotificationGMC не запускается и не может получить regID

    «Пропущенный список опций Apple LLVM 4.1 – Язык»

    Можно ли добавить ARCHS_STANDARD_32_BIT = armv6 armv7 в XCode 4.2?

    Каковы все разрешения AVCaptureSessionPresetHigh для задних и передних камер?

    Уведомление о включении устройства iOS

    Замените TableView в SplitViewController

    iOS 10 Webkit Воспроизведение нескольких видеороликов Inline

    Приложение ссылается на непубличный селектор в id (Facebook SDK iOS)

    Избегайте загрузки файла снова, если он не изменился

    iOS7 объединяет панель состояния и панель инструментов

    Как сделать прозрачный UITableViewController сверху?

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.