滚动后在 UICollectionViewCell 中重置 Scrollview

Posted

技术标签:

【中文标题】滚动后在 UICollectionViewCell 中重置 Scrollview【英文标题】:Reset Scrollview in UICollectionViewCell after scrolling 【发布时间】:2017-09-26 10:09:08 【问题描述】:

我正在创建一个带有this 概念的照片库。为了列出图像,我使用了UICollectionView。每个图像都存储在全屏大小的自定义单元格中。在牢房内,我有UIScrollView,在里面我有UIImageViewScrollView 用于缩放图像。一切正常,但是,当我放大一个图像并滚动到另一个单元格而不缩小时,我希望重置前一个单元格的滚动视图。

在自定义单元格类中,我为每个单元格的滚动视图设置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 在滚动时消失

UICollectionViewCell 内的 UIScrollView 不滚动

向下滚动时多次选择 UICollectionViewCell?

UICollectionViewCell 滚动时缩放单元格大小