UICollectionView ошибка горизонтальной прокрутки пользовательского интерфейса - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть такой код для представления моей коллекции

 let collectionView: UICollectionView = {
    let layout = UICollectionViewFlowLayout()
    layout.scrollDirection = .horizontal
    layout.minimumInteritemSpacing = 0
    layout.minimumLineSpacing = 0
    let cv = UICollectionView(frame: .zero, collectionViewLayout: layout)
    cv.translatesAutoresizingMaskIntoConstraints = false
    cv.isPagingEnabled = true
    cv.showsHorizontalScrollIndicator = false
    cv.backgroundColor = .white
    return cv
}()

И я хочу, чтобы в этом представлении коллекции отображалось 5 элементов по горизонтали, при этом на странице было 4 элемента. Он отлично работает, когда я перехожу на следующую страницу, которая будет содержать мои 2-5 элементы, но затем появляется ошибка. Если я просто нажму на вторую страницу, она автоматически перейдет к моей первой странице. Это не проблема, когда у меня всего шесть предметов, а на второй странице показаны 3-6 предметы. Кажется, это происходит, когда на второй странице отображается меньше элементов, как в моем первом примере.

Кто-нибудь может мне помочь с этой ошибкой?

Вот пример

class VC: UIViewController {
    // add collectionView to view in viewDidLoad
    view.addSubView(collectionView)
}

extension VC: UICollectionViewDelegate { }

extension VC: UICollectionViewDataSource {
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        4
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellId", for: indexPath)
        return cell
    }
}

extension VC: UICollectionViewDelegateFlowLayout {
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        CGSize(width: collectionView.bounds.width / 3, height: collectionView.bounds.height)
    }
}

...