J'ai sous-classé UICollectionViewFlowLayout pour obtenir le comportement horizontal de UICollectionView avec pagination. Cela fonctionne parfaitement bien tant que UICollectionViewCell n'est pas le premier de la dernière cellule. Images ci-dessous.Ajout de remplissage à la première et à la dernière cellule de UICollectionView
Ai-je besoin de passer outre quelque chose dans mon UICollectionViewFlowLayout tout en suivant?
- (CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity
{
CGFloat offSetAdjustment = MAXFLOAT;
CGFloat horizontalCenter = (CGFloat) (proposedContentOffset.x + (self.collectionView.bounds.size.width/2.0));
CGRect targetRect = CGRectMake(proposedContentOffset.x,
0.0,
self.collectionView.bounds.size.width,
self.collectionView.bounds.size.height);
NSArray *array = [self layoutAttributesForElementsInRect:targetRect];
for (UICollectionViewLayoutAttributes *layoutAttributes in array)
{
if(layoutAttributes.representedElementCategory == UICollectionElementCategoryCell)
{
CGFloat itemHorizontalCenter = layoutAttributes.center.x;
if (ABS(itemHorizontalCenter - horizontalCenter) < ABS(offSetAdjustment))
{
offSetAdjustment = itemHorizontalCenter - horizontalCenter;
}
}
}
CGFloat nextOffset = proposedContentOffset.x + offSetAdjustment;
do {
proposedContentOffset.x = nextOffset;
CGFloat deltaX = proposedContentOffset.x - self.collectionView.contentOffset.x;
CGFloat velX = velocity.x;
if(deltaX == 0.0 || velX == 0 || (velX > 0.0 && deltaX > 0.0) || (velX < 0.0 && deltaX < 0.0))
{
break;
}
if(velocity.x > 0.0)
{
nextOffset += [self snapStep];
}
else if(velocity.x < 0.0)
{
nextOffset -= [self snapStep];
}
} while ([self isValidOffset:nextOffset]);
proposedContentOffset.y = 0.0;
return proposedContentOffset;
}
- (BOOL)isValidOffset:(CGFloat)offset
{
return (offset >= [self minContentOffset] && offset <= [self maxContentOffset]);
}
- (CGFloat)minContentOffset
{
return -self.collectionView.contentInset.left;
}
- (CGFloat)maxContentOffset
{
return [self minContentOffset] + self.collectionView.contentSize.width - self.itemSize.width;
}
- (CGFloat)snapStep
{
return self.itemSize.width + self.minimumLineSpacing;
}
Des pointeurs/commentaires seront utiles.
vous pouvez utiliser 'UIEdgeInsets La propriété sectionInset' de 'UICollectionViewFlowLayout'. Reportez-vous à ce [post] (http://stackoverflow.com/questions/16934831/placing-a-margin-around-each-edge-of-the-uicollectionview). Reportez-vous également à la documentation Apple sur [Utilisation de l'encadré] (https://developer.apple.com/library/ios/documentation/WindowsViews/Conceptual/CollectionViewPGforIOS/UsingtheFlowLayout/UsingtheFlowLayout.html) –