Проблема с прокруткой ячейки в cellForItemAt в UICollectionView - PullRequest
0 голосов
/ 09 января 2019

EDIT: Проблема решена. Я следую руководству YouTube по созданию YouTube из LBTA.

Мой homeController содержит 4 ячейки, которые можно прокручивать по горизонтали. каждая ячейка (также UICollectionViewCell) имеет разные методы выборки для загрузки данных из Firebase.

У меня есть следующий код для прокрутки:

// в моем setupCollectionView

if let flowLayout = collectionView?.collectionViewLayout as? UICollectionViewFlowLayout {
        flowLayout.scrollDirection = .horizontal
        flowLayout.minimumLineSpacing = 0
    }

У меня также есть:

override func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
    let index = Int(targetContentOffset.pointee.x / view.frame.width)
    let indexPath = IndexPath(item: index, section: 0)
    menuBar.collectionView.selectItem(at: indexPath, animated: true, scrollPosition: .centeredHorizontally)
    setTitleForIndex(index: index)

}

У меня есть строка меню, прикрепленная к collectionView, строка меню работает нормально. Но UICollectionViewCell этого не делает.

Когда я проверяю его, прокручивая влево и вправо, индексные числа повсюду. Например, когда я прокручиваю до первой ячейки, она показывает 2 или 3, а иногда ничего не показывает. Когда я пытаюсь прокрутить влево первую ячейку, я все еще вижу изменения номера ячейки.

Я хотел бы спросить, какие подходящие методы используются для идентификации клеток в моем случае? Пожалуйста, предоставьте несколько примеров кодов. Благодарю. Изображение ниже показывает мое текущее состояние.

1 Ответ

0 голосов
/ 09 января 2019

Вам не нужно переопределять метод scrollViewWillEndDragging. Для collectionViews вы повторно используете ячейки. Поэтому, когда вы прокручиваете ячейку за пределами экрана, вызывается метод collectionViewCellForItemAt. Я предполагаю, что у вас есть только одна ячейка, которая показана одновременно. Поэтому, когда отображается новая ячейка, вы можете просто изменить заголовок на основе повторного использования ячейки.

// Note I only used partial code from your method
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: numberViewCellId, for: indexPath) as! ThirdViewCell 
        cell.delegate = self
        setTitleForIndex(index: indexPath.Row)
        return cell
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...