1. 程式人生 > >CollectionView 單個選項卡的滑動

CollectionView 單個選項卡的滑動

前言

最近在做一個旅行類的專案,裡面喲孤兒橫向滑動的選項卡功能,乍一看設計圖,感覺很簡單。橫向滑動,CollectionView的flowLayout有這個設定屬性,分分鐘搞定。後來需求要每次滑動一個選項卡。這就讓我有點棘手了,因為心裡知道這個應該是要自己去計算偏移量的問題了

正題

實現這個功能,主要就是呼叫了一個UIScrollView的代理方法- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset

不說別的了,直接上程式碼

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset{
    float pageWidth = 200 + 10;
    float currentOffset = _collectionView.contentOffset.x;
    float targetOffset = targetContentOffset->x;
    float
newTargetOffset = 0; if (targetOffset+ 20 > currentOffset) { newTargetOffset = ceilf(currentOffset/pageWidth) * pageWidth; }else{ newTargetOffset = floorf(currentOffset/ pageWidth) * pageWidth; } if (newTargetOffset < 0) { newTargetOffset = 0; }else if (ABS(scrollView.contentSize.width - (newTargetOffset + pageWidth))< pageWidth){ newTargetOffset = scrollView.contentSize.width - _collectionView.bounds.size.width ; } newTargetOffset = ceilf(newTargetOffset); targetContentOffset->x = currentOffset; [scrollView setContentOffset:CGPointMake
(newTargetOffset, 0) animated:YES]; } 複製程式碼

這裡面pageWidth的值是一個item的寬度加間距,之後對於滑到最後一個item的時候不足一個item的寬度做了相應的處理。

如果你們的設計是兩邊都有留白的情況,你可以設定flowLayout.sectionInset,相應的collectionViewcontentInset屬性也要做相應的處理

OS:

大神們有什麼好的建議多給我提出來

傳送門

Demo