#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 переходить ко второй ячейке, поэтому он постоянно застревает во втором элементе (и это похоже на отсутствие прокрутки, но прокрутка происходит, и вы этого не заметите, посколькуэто происходит мгновенно), поэтому для выполнения этого действия прокрутки требуется логический параметр, который выполняется один раз, то есть прокрутка до указанного индекса