Макет UICollectionView последней ячейки

У меня есть представление коллекции, в котором есть UICollectionViewFlowLayout. Я помещаю в него 10 элементов. и они имеют разные размеры:

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {

if (indexPath.row<6) {
    CGSize retval =  CGSizeMake(100, 100);
    return retval;
}

CGSize retval =  CGSizeMake(200, 130);

return retval;
}

это выглядит так: первые 6 ячеек выглядят хорошо, а 7-9 - правильно, но последняя не выровнена по центру,

введите здесь описание изображениявведите здесь описание изображения

кто-нибудь может мне это объяснить?

и последние дни. Я играю с макетами коллекций, но все еще чувствую себя сбитым с толку выбором flowlayout и custom layout. какие-то принципы по этому поводу?

заранее большое спасибо.


person NickYu    schedule 21.07.2014    source источник
comment
UICollectionView всегда пытается заполнить столько элементов, сколько помещается в строке. Вы можете видеть это в вашем примере: на изображении 1 есть место для 3 элементов в строке, а на изображении 2 есть место только для одного изображения. Теперь проблема в последней строке заключается в том, что UICollectionView не знает, будет ли там другой элемент или нет, поэтому он выравнивается в сторону и ждет следующего элемента. Это проблема с autoLayout, представления выравниваются автоматически, а не с помощью делегата макета. (Возможно, это поможет кому-то решить эту проблему, так как она, кажется, все еще открыта)   -  person choli    schedule 27.04.2016


Ответы (1)


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

Попробуйте установить для sectionInset flowLayout значение 0:

flowLayout.sectionInset = UIEdgeInsetsZero;

Если это не сработает, вам может потребоваться принудительно установить минимальное пространство InterItemSpacing, поскольку макет потока, похоже, искажает это в последних нескольких ячейках:

flowLayout.minimumInteritemSpacing = 10.f;//or any reasonable number
person Daniel Galasko    schedule 17.12.2014