• 赚钱入口【需求资源】限时招募流量主、渠道主,站长合作;【合作模式】CPS长期分成,一次推广永久有收益。主动打款,不扣量;

scrollToItemAtIndexPath在iOS 14上不起作用

iOS rin, seun 1个月前 (09-24) 226次浏览 0个评论

iOS 14 scrollToItemAtIndexPath 上遇到问题。在以前的iOS版本中,当用户停止拖动时,下一个单元格水平居中,现在该方法 scrollToItemAtIndexPath 不生效,并且停留在第一个单元格中。

    - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
    if( scrollView.tag == 1 ) {
        if (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPad){
            *targetContentOffset = scrollView.contentOffset; // set acceleration to 0.0
            float pageWidth = (float) (self.view.frame.size.width)-80;
            int minSpace = 10;
            
            int cellToSwipe = (scrollView.contentOffset.x)/(pageWidth + minSpace) + (velocity.x < 0 ? 0 : 1); // cell width + min spacing for lines
            if (cellToSwipe < 0) {
                cellToSwipe = 0;
            } else if (cellToSwipe >= MIN(6, self.news.count )) {
                cellToSwipe = (int) MIN(6, self.news.count);
            }
            [self.newsCollectionView scrollToItemAtIndexPath: [NSIndexPath indexPathForRow:cellToSwipe inSection:0]
                                            atScrollPosition: UICollectionViewScrollPositionCenteredHorizontally
                                                    animated: YES];

        }
    }
    
}

解决

可以使用layoutAttributesForItem(at indexPath: IndexPath)的UICollectionViewLayout计算合适的contentOffset

解决方法可能是这样的:

extension UICollectionView {
    func scrollTo(indexPath: IndexPath) {
        let attributes = collectionViewLayout.layoutAttributesForItem(at: indexPath)!
        setContentOffset(attributes.frame.origin, animated: true)
    }
}
喜欢 (1)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址