2016-02-23 4 views
1

У меня возникла странная ситуация, когда UICollectionView меняет размер, если он загружен 0 ячейками в первый раз. Если он загружен с более чем 0 ячейками, первый раз он сохраняет правильный размер. Такое поведение не имеет для меня никакого смысла, и я не знаю, как его исправить.UICollectionView изменение размера при пустом

Я использую вид с разбивкой по страницам, похожий на то, что описано here.

Это означает, что я устанавливаю размер ячейки, чтобы быть таким же, как размер зрения коллекции:

- (CGSize)collectionView:(UICollectionView *)collectionView 
        layout:(UICollectionViewLayout *)collectionViewLayout 
    sizeForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return collectionView.bounds.size; 
} 

Как ни странно я получаю сообщение об ошибке:

2016-02-23 14:27:10.574 the behavior of the UICollectionViewFlowLayout is not defined because: 
2016-02-23 14:27:10.574 the item height must be less than the height of the UICollectionView minus the section insets top and bottom values, minus the content insets top and bottom values. 
2016-02-23 14:27:10.575 The relevant UICollectionViewFlowLayout instance is <UICollectionViewFlowLayout: 0x7fa90ac86d30>, and it is attached to <UICollectionView: 0x7fa90c84da00; frame = (0 0; 414 150); clipsToBounds = YES; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x7fa90ac88450>; layer = <CALayer: 0x7fa90ac85b70>; contentOffset: {0, 0}; contentSize: {828, 187}> collection view layout: <UICollectionViewFlowLayout: 0x7fa90ac86d30>. 
2016-02-23 14:27:10.575 Make a symbolic breakpoint at UICollectionViewFlowLayoutBreakForInvalidSizes to catch this in the debugger. 

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

Мне кажется, что просмотр коллекции меняет свою высоту в зависимости от того, пуста она или нет, что для меня не имеет никакого смысла. Кто-нибудь знает, как я могу это исправить или какие-либо предложения о том, как я могу обойти это?

UPDATE:

Похоже, я не полностью понять проблему, когда я задал этот вопрос. Я думал, что проблема связана с тем, что у меня не было никаких ячеек при первом загрузке коллекции. Поэтому я подумал, что простым решением было бы поместить пустую ячейку-заполнитель при загрузке содержимого. К сожалению, размер ячейки все еще запутан, когда я перезаряжаю данные. Таким образом, проблема заключается в том, что размер является правильным только при первом загрузке коллекции и при любой последующей перезагрузке размер становится неправильным.

+0

Что касается contentinset of uicollectionview? –

ответ

0

Похоже, я нашел решение: установив estimatedItemSize на макет, я избавлюсь от проблемы.

flowLayout.estimatedItemSize = collectionView.bounds.size; 

EDIT: Это решение работает, когда ширина ячейки помещается на экране. В противном случае ячейка займет столько места, сколько потребуется, чтобы полностью показать ее содержимое, и она будет шире экрана, если содержимое слишком велико. Поскольку у меня динамический контент, это неприемлемо. Это решение может работать для кого-то другого в подобной ситуации, поэтому я сохраняю этот ответ, но мне нужно будет найти лучшее решение.

+0

Это решение, похоже, завинчило ширину ячеек. Теперь они слишком широкие, а не слишком высокие. Поэтому теперь мне нужно найти способ исправить это. –

0

Я нашел причину изменения размера коллекции. У него было ограничение на UIPageControl, которое исчезло бы при наличии 0 или 1 страницы. Мое решение состояло в том, чтобы установить свойство hidesForSinglePage в NO и использовать ячейку-заполнитель, когда нет содержимого.

Другим решением могло бы стать ограничение в нижней части супер-представления, а не на UIPageControl. Таким образом, было бы нормально, если элемент управления страницы исчезнет. Я хочу, чтобы элемент управления страницы был там всегда, но если вы этого не сделаете, это решение будет для вас. В качестве альтернативы вы можете изменить размер супер-представления в зависимости от того, виден ли элемент управления страницей.

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