UICollectionView выделите элемент, не работающий с горизонтальным направлением
У меня есть UICollectionView
в UIViewController
с включенным пейджингом. По какой-то странной причине collectionView.scrollToItem
работает, когда направление collectionview
является vertical
но не в том случае, когда направление horizontal
. Это что-то, что я делаю неправильно или это должно произойти?
//Test scrollToItem
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let i = IndexPath(item: 3, section: 0)
collectionView.reloadData()
collectionView.scrollToItem(at: i, at: .top, animated: true)
print("Selected")
}
Ответы
Ответ 1
Для этой части:
collectionView.scrollToItem(at: i, at:.top, animated: true)
Когда направление прокрутки horizontal
вам нужно использовать его at: left
, at: right
или at: centeredHorizontally
. at: top
для vertical
направления.
Ответ 2
У меня возникли проблемы с реализацией этого в макете потока с введенным пейджингом на элемент. .CenteredHorizontally просто не будет работать для меня, поэтому я использую прокрутку для прямой и проверьте, есть ли данные перед прокруткой:
if self.collectionView?.dataSource?.collectionView(self.collectionView!, cellForItemAt: IndexPath(row: 0, section: 0)) != nil {
let rect = self.collectionView.layoutAttributesForItem(at: IndexPath(item: data[index], section: 0))?.frame
self.collectionView.scrollRectToVisible(rect!, animated: false)
}
Ответ 3
Swift 5 Xcode 10
collectionView.scrollToItem(at: IndexPath(item: pageNumber , section: 0), at: .centeredHorizontally, animated: true)
self.collectionView.layoutSubviews() // **Without this effect wont be visible**
Ответ 4
Swift 3:
Это работало для меня в режиме горизонтального просмотра.
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
//Show 14th row as first row
self.activityCollectionView?.scrollToItem(at: IndexPath(row: 14, section: 0), at: UICollectionViewScrollPosition.right, animated: true)
}
Вы можете выбрать, будет ли требуемая ячейка в индексе находиться справа или слева в позиции прокрутки.
UICollectionViewScrollPosition.right or UICollectionViewScrollPosition.left.
Ответ 5
Для прокрутки элемента нет необходимости перезагружать данные. Удалите строку ниже вашего кода и попробуйте.
collectionView.reloadData()