UICollectionView оформление на последната клетка

Имам collectionview, който има 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 и персонализирано оформление. някакви принципи по въпроса?

много THX предварително.


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;

Ако това не работи, може да се наложи да наложите minimumInterItemSpacing, тъй като изглежда, че оформлението на потока затруднява това в последните няколко клетки:

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