当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:每次用户滚动时如何强制它重绘可见部分?
如何在滚动 contentView 之前向上移动 scrollview 的框架? (当 scrollView 从屏幕中间开始时)
UIColectionView Vertical Scrolling inside a Scrollview - 在集合视图区域中滚动时禁用滚动视图的滚动