Ячейка CollectionView динамического размера, вызывающая проблему с видимостью — iOS

#ios #objective-c #dynamic #uicollectionview #cgsize

#iOS #objective-c #динамический #uicollectionview #cgsize

Вопрос:

У меня есть представление коллекции из 3 столбцов и нескольких строк. В моем sizeForItemAtIndexPath случае я возвращаю динамику CGSize следующим образом :

 return CGSizeMake(_sponsoredCollectionView.frame.size.width/3 - 7, (_sponsoredCollectionView.frame.size.width/3 - 7   nameHeight   cuisineHeight   addressHeight   timingHeight   paddings));
  

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

И когда я жестко задаю размер до следующего :

 return CGSizeMake(_sponsoredCollectionView.frame.size.width/3 - 7,250);
  

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

Кроме того, я делаю следующее, чтобы CollectionView изменял размер в соответствии с ячейками после реальной загрузки

 [_sponsoredCollectionView reloadData];

dispatch_async(dispatch_get_main_queue(), ^{
  _sponsoredCollectionViewHeightConstraint.constant = _sponsoredCollectionView.collectionViewLayout.collectionViewContentSize.height   0;
});
  

Я не могу понять, в чем проблема: S Пожалуйста, помогите!

Комментарии:

1. Пожалуйста, кто-нибудь может помочь? Пытался слишком долго, но не смог решить

Ответ №1:

Наконец, после целой ночи проб и ошибок и исследований, я решил это, просто изменив _sponsoredCollectionViewHeightConstraint.constant внутри performBatchUpdates вот так :

 [_sponsoredCollectionView reloadData];

dispatch_async(dispatch_get_main_queue(), ^{
                        [self.sponsoredCollectionView performBatchUpdates:^{
                            _sponsoredCollectionViewHeightConstraint.constant = _sponsoredCollectionView.collectionViewLayout.collectionViewContentSize.height   5;//_sponsoredCollectionView.contentSize.height   5;
                        } completion:nil];
                    });