scrollToItemAtIndexPath: atScrollPosition: animated:


oh my god

今天死在scrollToItemAtIndexPath: atScrollPosition: animated:方法上面,scrollPosition這個參數控制cell具體停留在上下左右中到底哪個位置,看了API有7個枚舉值

UICollectionViewScrollPositionNone                 = 0,
    
// The vertical positions are mutually exclusive to each other, but are bitwise or-able with the horizontal scroll positions.
// Combining positions from the same grouping (horizontal or vertical) will result in an NSInvalidArgumentException.
    UICollectionViewScrollPositionTop                  = 1 << 0,
    UICollectionViewScrollPositionCenteredVertically   = 1 << 1,
    UICollectionViewScrollPositionBottom               = 1 << 2,
    
// Likewise, the horizontal positions are mutually exclusive to each other.
    UICollectionViewScrollPositionLeft                 = 1 << 3,
    UICollectionViewScrollPositionCenteredHorizontally = 1 << 4,
    UICollectionViewScrollPositionRight                = 1 << 5

之前沒有去理解過它幾個參數的意思,要實現在二級界面通過indexPath獲取到一級界面的collectionView的對應位置的cell

UIView *sourceCell = [_sourceView cellForItemAtIndexPath:indexPath];
if (!sourceCell) {
    [_sourceView scrollToItemAtIndexPath:indexPath atScrollPosition:UICollectionViewScrollPositionCenteredVertically animated:NO];
    [_sourceView layoutIfNeeded];
    sourceCell = [_sourceView cellForItemAtIndexPath:indexPath];
}

此時cell存在nil的情況,collectionView.visibleCells沒有這個cell,需要從重用池獲取,所以要滾動到這個cell位置后走layoutSubViews布局,這樣才拿的到cell

在給參數時給了 UICollectionViewScrollPositionLeft  ,然后pop回去就一直沒效果,用了代理 block都還是不行,以為是layoutIfNeeded的問題搞了很久。

最后 給 UICollectionViewScrollPositionCenteredVertically 這個就成了。

根據API的解釋 分成水平滾動和垂直滾動

可以想象的是當collectionView水平滾動時cell的定點相對於整個collectionView的左中右位置

                                     當垂直滾動時cell的定點相對於整個collectionView的上中下位置


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM