滚动后在 UICollectionViewCell 中重置 Scrollview
Posted
技术标签:
【中文标题】滚动后在 UICollectionViewCell 中重置 Scrollview【英文标题】:Reset Scrollview in UICollectionViewCell after scrolling 【发布时间】:2017-09-26 10:09:08 【问题描述】:我正在创建一个带有this 概念的照片库。为了列出图像,我使用了UICollectionView
。每个图像都存储在全屏大小的自定义单元格中。在牢房内,我有UIScrollView
,在里面我有UIImageView
。 ScrollView
用于缩放图像。一切正常,但是,当我放大一个图像并滚动到另一个单元格而不缩小时,我希望重置前一个单元格的滚动视图。
在自定义单元格类中,我为每个单元格的滚动视图设置ZoomScale
,如下所示:
func configureCell(_ photo: String)
albumPhoto.image = UIImage(named: photo)
scrollView.setZoomScale(1.0, animated: false)
在返回单元格之前,我在cellForItemAt
函数中配置了每个单元格。
当我放大第一个单元格,滚动到第二个并滚动回第一个单元格时,图像仍然被放大。但是如果我滚动到第二个和第三个单元格然后返回到第一个单元格,图像被放大设置为默认值。
即使从第二个单元格立即滚动回第一个单元格后,我如何才能做到这一点,滚动视图将设置为默认缩放比例。
【问题讨论】:
【参考方案1】:你需要实现这个方法:https://developer.apple.com/documentation/uikit/uicollectionviewdelegate/1618087-collectionview 并在显示单元格之前缩小滚动视图。此方法将处理您的情况。快乐编码;)
func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath)
【讨论】:
【参考方案2】:首先让你的类符合
class profViewController: UIScrollViewDelegate
由于 UICollectionView 是 UIScrollView 的子类
第二次实现这个委托方法
func scrollViewDidScroll(_ scrollView: UIScrollView)
let cd = areaSettTable.visibleCells as!
[profTableViewCell]
//////
loop here
然后遍历这个数组并调用为每个单元格重置缩放的函数
注意:您应该将 profTableViewCell 名称更改为您的单元格
【讨论】:
我已经考虑过了,但我不确定这是不是最好的方法,因为我必须遍历每个单元格。我可能有很多单元格,并且只为一个单元格循环遍历所有单元格似乎不是最好的解决方案。 循环只适用于可见单元格而不是tableview的所有单元格 多少个单元格会被认为是可见单元格,是不是也包含在这个单元格中? 不,它不仅在屏幕上可见,而且您的单元格是全屏的,因此可见单元格的最大数量为 2 好的,我试试看。谢谢。以上是关于滚动后在 UICollectionViewCell 中重置 Scrollview的主要内容,如果未能解决你的问题,请参考以下文章
UICollectionViewCell 滚动:Swift 3
在 UICollectionViewCell 内的 UICollectionView 中平滑滚动
UICollectionViewCell 内的 UIScrollView 不滚动