让UICollectionView从右向左滚动?

时间:2012-12-09 03:06:20

标签: objective-c iphone cocoa-touch uiscrollview uicollectionview

水平设置时UICollectionView滚动的自然方向是从左到右。有没有办法扭转这种局面?越简越好。

4 个答案:

答案 0 :(得分:10)

我不确定你的意思 - 如果你将滚动设置为水平,它会向右和向右滚动。如果您希望它从右侧启动,您可以使用此方法:

[self.collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForItem:self.theData.count - 1 inSection:0] atScrollPosition:UICollectionViewScrollPositionRight animated:NO];

这假设您有1个部分,填充集合视图的数组称为theData。

答案 1 :(得分:2)

swift也是如此:

collectionView?.scrollToItemAtIndexPath(NSIndexPath(forItem: theData.count - 1, inSection: 0), atScrollPosition: .Right, animated: false)

答案 2 :(得分:0)

Swift4解决方案 在cellForItemAt collectionView函数中

  func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
                let cell = categoryBook.dequeueReusableCell(withReuseIdentifier: "HomeCategoryCell", for: indexPath) as! HomeCategoryCell
                collectionView.transform = CGAffineTransform(scaleX:-1,y: 1);


                cell.transform = CGAffineTransform(scaleX:-1,y: 1);
               }

但是这种解决方案在某些情况下t work properly if it dosen不能使用colletcion视图scrollToItem方法,并且可以在重新加载数据后实现它。

        self.YourCollectionView.reloadData()
        self.YourCollectionView.scrollToItem(at: NSIndexPath(item: self.YourObjectListData.count - 1, section: 0) as IndexPath, at: .right, animated: false)

答案 3 :(得分:0)

我发现将 xCode 12.4 与面向 iOS 12 的应用程序一起使用,似乎不需要以不同的顺序加载项目或进行任何转换。唯一的问题与初始滚动位置有关。所以我需要做的就是让事情在 RTL 和 LTR 中工作如下:

collectionView.reloadData {
        if self.collectionView.effectiveUserInterfaceLayoutDirection == .rightToLeft {
            self.collectionView?.scrollToItem(at: IndexPath(row:0, section:0), at: .right, animated: false)
        }
    }