Как я могу прокрутить collectionView, когда прокрутка прокрутки в Swift? - PullRequest
0 голосов
/ 25 июня 2018

У меня есть Scrollview и Collectionview, они оба прокручиваются по горизонтали

scrollview имеют страницы, и я хочу, чтобы при прокрутке scrollview также прокручивал коллекцию и выбирал ту же индексированную ячейку просмотра, что и индекс страницы прокрутки

проблема здесь в том, что после прокрутки scrollview также прокручивает collectionview и выбирает ячейку, такую ​​же индексированную, как страницы scrollview, но после этого viewview не прокручивает сам себя.

Извините, возможно, неправильный формат вопроса, я новичок здесь

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell=collectionView.dequeueReusableCell(withReuseIdentifier: "mycell", for: indexPath) as! MenuListCollectionViewCell
    cell.commoninit(name: ListOfMenu[indexPath.row])

   let IndexForCol = (scrollview.contentOffset.x / scrollview.frame.size.width).rounded()

    if selectedIndex == Int(indexPath.row)
    {

        cell.backgroundColor = UIColor(hue: 0.6167, saturation: 1, brightness: 0.97, alpha: 1.0)
        cell.layer.cornerRadius = 14

    }
    if indexPath.row == Int(IndexForCol) {
        cell.backgroundColor = UIColor(hue: 0.6167, saturation: 1, brightness: 0.97, alpha: 1.0)

    }
    else
    {
        cell.backgroundColor = UIColor.clear
    }

    return cell
}



func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {   
 selectedIndex = indexPath.row
    UIView.animate(withDuration: 0.5, animations: {
        self.scrollview.contentOffset.x = self.scrollview.frame.width*CGFloat(indexPath.row)
    })

}




func scrollViewDidScroll(_ scrollView: UIScrollView) {
  let indexOfPage = round(scrollview.contentOffset.x / scrollview.frame.size.width)
  UIView.animate(withDuration: 0.5, animations: {
       self.collectionview.scrollToItem(at:IndexPath(item: Int(indexOfPage), section: 0), at: .right, animated: false)
  })
 collectionview.reloadData()

}

Изображение симулятора:

enter image description here

1 Ответ

0 голосов
/ 25 июня 2018

scrollViewDidScroll вызывается как для collectionView, так и для scrollView, поэтому присвойте тег scrollView, а затем

//

func scrollViewDidScroll(_ scrollView: UIScrollView) {

  if scrollView.tag == 2 { // scrollView scrolled 
      use collectionView's scrollToItem
  }
  else {                    // collectionView scrolled 
       set contentOffset to the scrollView
  }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...