좋아요, 대답은 아니오입니다. UICollectionViewFlowLayout을 서브 클래 싱하지 않고는이를 수행 할 수있는 방법이 없습니다.
그러나 서브 클래 싱은 미래에 이것을 읽는 모든 사람에게 매우 쉽습니다.
먼저 서브 클래스 호출을 설정 MyCollectionViewFlowLayout
한 다음 인터페이스 빌더에서 컬렉션 뷰 레이아웃을 Custom으로 변경하고 플로우 레이아웃 서브 클래스를 선택했습니다.
이런 식으로 수행하기 때문에 IB에서 항목 크기 등을 지정할 수 없으므로 MyCollectionViewFlowLayout.m 에이 있습니다 ...
- (void)awakeFromNib
{
self.itemSize = CGSizeMake(75.0, 75.0);
self.minimumInteritemSpacing = 10.0;
self.minimumLineSpacing = 10.0;
self.scrollDirection = UICollectionViewScrollDirectionHorizontal;
self.sectionInset = UIEdgeInsetsMake(10.0, 10.0, 10.0, 10.0);
}
이것은 나를 위해 모든 크기와 스크롤 방향을 설정합니다.
그럼 ...
- (CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity
{
CGFloat offsetAdjustment = MAXFLOAT;
CGFloat horizontalOffset = proposedContentOffset.x + 5;
CGRect targetRect = CGRectMake(proposedContentOffset.x, 0, self.collectionView.bounds.size.width, self.collectionView.bounds.size.height);
NSArray *array = [super layoutAttributesForElementsInRect:targetRect];
for (UICollectionViewLayoutAttributes *layoutAttributes in array) {
CGFloat itemOffset = layoutAttributes.frame.origin.x;
if (ABS(itemOffset - horizontalOffset) < ABS(offsetAdjustment)) {
offsetAdjustment = itemOffset - horizontalOffset;
}
}
return CGPointMake(proposedContentOffset.x + offsetAdjustment, proposedContentOffset.y);
}
이렇게하면 스크롤이 왼쪽 가장자리에서 여백 5.0으로 끝납니다.
그게 내가해야 할 전부입니다. 코드에서 흐름 레이아웃을 설정할 필요가 전혀 없었습니다.