Почему просмотр коллекции загружает центр карусели с этим кодом?

#ios #swift #xcode #scroll #collectionview

#iOS #swift #xcode #прокрутка #collectionview

Вопрос:

Я пытался выяснить, как заставить мой просмотр коллекции из 3 ячеек загружаться со 2-й ячейки, и я, наконец, понял это, просмотрев StackOverflow. Однако код, с которым я столкнулся, немного сбивает меня с толку. Кто-нибудь сможет объяснить, почему этот приведенный ниже код работает так, что моя ячейка просмотра коллекции (которая занимает весь экран) начинается со 2-й из 3-х ячеек? (это эффект, которого я хотел достичь с самого начала, но я хочу узнать больше о том, почему этот код работает именно так.

В этом блоке кода есть переменная bool и оператор if, зачем они нужны? Когда я извлек логическую переменную и оператор if, представление коллекции не удалось прокрутить.

Как именно работает этот блок кода?

Спасибо.

 var onceOnly = false

internal override func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
    if !onceOnly {
        let indexToScrollTo = IndexPath(item: 1, section: 0)
        self.collectionView.scrollToItem(at: indexToScrollTo, at: .left, animated: false)
        onceOnly = true
    }
}
  

Ответ №1:

1 — Это scrollToItem в документах

 let indexToScrollTo = IndexPath(item: 1, section: 0)
self.collectionView.scrollToItem(at: indexToScrollTo, at: .left, animated: false)
  

заставляет CollectionView прокручиваться до второго элемента в списке

2-

Когда я извлек логическую переменную и оператор if, представление коллекции не удалось прокрутить

Потому willDisplay что вызывается для отображения каждой ячейки, поэтому, когда, например, вы прокручиваете до 3-й ячейки, willdisplay вызывается и заставляет CollectionView переходить ко второй ячейке, поэтому он постоянно застревает во втором элементе (и это похоже на отсутствие прокрутки, но прокрутка происходит, и вы этого не заметите, посколькуэто происходит мгновенно), поэтому для выполнения этого действия прокрутки требуется логический параметр, который выполняется один раз, то есть прокрутка до указанного индекса