swift - 从右到左的水平集合视图从左到右显示不正确

swift - right to left horizontal collection view in displayed incorrectly from left to right

我正在从右到左显示一个水平的集合视图,遇到一个问题,当显示元素时,它们从末尾显示(而不是从左到右):

提出的一个解决方案是添加下面有效的代码,但需要我颠倒顺序才能添加项目。我想知道是否有更好的方法来做到这一点,并且也在 API 而不是使用覆盖扩展名

extension UICollectionViewFlowLayout {

open override var flipsHorizontallyInOppositeLayoutDirection: Bool {
    return true
}

}

sample project

不胜感激

代码:

import UIKit

class HorizontalScrollTestViewController: UIViewController, UICollectionViewDataSource , CellDelegate{


    var items = [String]()

@IBOutlet weak var collectionView: UICollectionView!



func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return items.count
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ReusableCell", for: indexPath) as! CategoryCollectionViewCell

    cell.category.setTitle(items[indexPath.row] , for: UIControl.State.normal)
    cell.delegate = self
    return cell

}



override func viewDidLoad() {
    super.viewDidLoad()

    let dispatchQueue = DispatchQueue(label: "resourcesQueue", qos: .background)
    dispatchQueue.async {
        self.addItems()

        DispatchQueue.main.async {
            self.collectionView.reloadData()
        }

    }
    collectionView.dataSource = self

    collectionView?.register(UINib(nibName: "CategoryCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "ReusableCell")


}

func buttonPressed(_ cell: UICollectionViewCell) {
    if  let row = self.collectionView.indexPath(for: cell)?.row {
        print(items[row])
    }
}


func addItems() {
    self.items.append("test 10")
    self.items.append("test 9")
    self.items.append("test 8")
    self.items.append("test 7")
    self.items.append("test 6")
    self.items.append("test 5")
    self.items.append("test 4")
    self.items.append("test 3")
    self.items.append("test 2")
    self.items.append("test 1")



 }
}

在应用程序启动后添加项目并使用 reloadData 的示例:

预期行为

在这里,您只需水平翻转 collectionViewcollectionViewCell。这将解决您的问题。

有了这个你可以水平翻转你的collectionView。这样您的 collectionView 从右边开始。您的第一个元素将在右侧,最后一个元素将在左侧。

collectionView.transform = CGAffineTransform(scaleX: -1, y: 1)

collectionView.transform = CGAffineTransform(a: -1.0, b: 0.0, c: 0.0, d: 1.0, tx: 0.0, ty: 0.0)

同样,你必须翻转每个 collectionViewCell 也使用

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

cell.transform = CGAffineTransform(a: -1.0, b: 0.0, c: 0.0, d: 1.0, tx: 0.0, ty: 0.0)

并按以下顺序在数组中添加元素

func addItems() {
        self.items.append("test 1")
        self.items.append("test 2")
        self.items.append("test 3")
        self.items.append("test 4")
        self.items.append("test 5")
        self.items.append("test 6")
        self.items.append("test 7")
        self.items.append("test 8")
        self.items.append("test 9")
        self.items.append("test 10")
    }

Here

下载更新的项目