当scrollview快速滚动时如何滚动collectionView?

Posted

技术标签:

【中文标题】当scrollview快速滚动时如何滚动collectionView?【英文标题】:How can I scroll collectionView when scrollview scrolls in swift? 【发布时间】:2018-06-25 13:07:39 【问题描述】:

我有 Scrollview 和 Collectionview,它们都是水平滚动的

scrollview 有页面,我想要在 scrollview 滚动时,也滚动 collectionview 并选择与 scrollview 页面索引相同的索引 collectionview 单元格

这里的问题是,在滚动视图滚动后,集合视图也会滚动,它会选择与滚动视图页面索引相同的单元格,但在此之后集合视图不会自行滚动。

抱歉,问题的格式可能不好,我是新来的

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()


模拟器图片:

【问题讨论】:

【参考方案1】:

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
  


【讨论】:

以上是关于当scrollview快速滚动时如何滚动collectionView?的主要内容,如果未能解决你的问题,请参考以下文章

如何自动滚动 ScrollViewer - 仅当用户未更改滚动位置时

目标 C. ScrollView:每次用户滚动时如何强制它重绘可见部分?

如何设置scrollView 横向滚动

如何在滚动 contentView 之前向上移动 scrollview 的框架? (当 scrollView 从屏幕中间开始时)

UIColectionView Vertical Scrolling inside a Scrollview - 在集合视图区域中滚动时禁用滚动视图的滚动

ScrollView不会快速滚动