#swift #uicollectionview #collectionview #indexpath
#swift #uicollectionview #collectionview #indexpath
Вопрос:
У меня есть UICollectionView, установленный внутри UIView таким образом:
videoCollectionView.delegate = self
videoCollectionView.dataSource = self
self.playerView.insertSubview(videoCollectionView, belowSubview: additionalItemsView)
videoCollectionView.fillSuperview()
Вот как реализованы методы источника данных и делегата
extension CardView : UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout{
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
let numberOfURLS = cardModel?.urlStrings?.count
return numberOfURLS!
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let videoCell = collectionView.dequeueReusableCell(withReuseIdentifier: "videoCellIdentifier", for: indexPath)
videoCell.backgroundColor = UIColor.random()
return videoCell
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: self.bounds.width, height: self.bounds.height)
}
}
Как вы можете видеть из приведенного выше кода, каждая ячейка равна размеру collectionView.frame
Я хочу, чтобы ячейки CollectionView отображались горизонтально и могли прокручиваться через них.
это код, который я реализовал для горизонтальной прокрутки ячеек:
fileprivate func goToNextVideo(){
counter = counter 1
counter = min(cardModel!.urlStrings!.count-1, counter)
videoCollectionView.scrollToItem(at: IndexPath(item: 0, section: counter), at: .left, animated: true)
}
fileprivate func goToPreviousVideo(){
counter = counter - 1
counter = max(0, counter)
videoCollectionView.scrollToItem(at: IndexPath(item: 0, section: counter), at: .left, animated: true)
}
Я не знаю, по какой причине CollectionView не прокручивается до нужной ячейки, и я получаю это предупреждение в консоли:
Warning: Invalid IndexPath <NSIndexPath: 0xa5dbc31284d24cfa> {length = 2, path = 1 - 0} specified - will use a contentOffset of {0,0} as a fallback value.
Ответ №1:
Мне кажется, что
IndexPath(item: 0, section: counter)
выполняется в обратном направлении (дважды). Попробуйте
IndexPath(item: counter, section: 0)
в обоих местах.
Комментарии:
1. Он не выдает мне предупреждение, как раньше, но он еще не прокручивается до элемента этого индексного пути, я также заметил, что размер содержимого CollectionView равен (355.0, 1667.0), что означает, что он развивается вертикально, а не горизонтально, как я хотел
2. Конечно, я тоже об этом подумал, но это другое дело. Вопрос о том, является ли это представлением коллекции с горизонтальной или вертикальной прокруткой, зависит от вас. Вы не показали ни одного кода, в котором вы настраиваете свой
videoCollectionView
, поэтому у меня нет оснований полагать, что вы делаете это правильно.3. Я решил это, добавив пользовательский UICollectionViewFlowLayout() и установив для его свойства scrollDirection значение horizontal
4. Да, я не уверен, что вы подразумеваете под «пользовательским»; UICollectionViewFlowLayout имеет
scrollDirection
свойство, и вы можете просто установить его. Для этой цели вам не нужно создавать подклассы.