如何在选择时将 UICollectionView 单元格扩展到屏幕的宽度?

Posted

技术标签:

【中文标题】如何在选择时将 UICollectionView 单元格扩展到屏幕的宽度?【英文标题】:How to expand a UICollectionView cell to the width of the screen upon selection? 【发布时间】:2016-12-28 11:16:17 【问题描述】:

我正在尝试复制 eBay ios 应用程序如何显示其图像并允许用户将每个图像放大。

它是这样工作的:

eBay 使用UICollectionView 来显示图像列表。当用户选择一个单元格时,该单元格会在顶部展开一些按钮。选择x时,单元格折叠回原始大小。

我怎样才能达到类似的效果?

我查看了UICollectionView Enlarge cell on selection 和Expanding UICollectionView and its cell when tapped 的问题,并尝试用我自己的想法来实现它。

其中一个问题是我有 AutoLayout 设计,这让这变得相当困难。

这是我的故事板:

我试过了:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)

    let cell = collectionView.cellForItem(at: indexPath)

    cell?.superview?.bringSubview(toFront: cell!)

    UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: [], animations: (

        self.structureImageView.frame = CGRect(x: 0, y: 0, width: 375, height: 667)
        collectionView.frame = self.structureImageView.bounds
        cell?.frame = collectionView.bounds

        self.separatorView.frame.origin.y = 667
        self.structureInfoView.frame.origin.y = 667

    ), completion: nil)

    test = true
    collectionView.reloadData()



var test = false

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt  indexPath: IndexPath) -> CGSize

    if test == true
    
        return CGSize(width: 375, height: 667)
    
    return CGSize(width: cellWidth!, height: cellHeight!)

结果:

任何帮助都会有很大帮助!

【问题讨论】:

它不会扩展 UICollectionView Cell,但它会弹出另一个控制器作为具有自定义转换的模态。你可能需要[这个] (github.com/michaelhenry/MHFacebookImageViewer) 如果您有多个图像,请使用此github.com/zvonicek/ImageSlideshow。 正如@iphonic 提到的,我也认为它没有扩展单元格。它只是一个带有自定义转换的模态视图控制器。如果你在你的情况下这样做会更容易。我并不是说不能用细胞来做这件事……但这会困难得多…… 嗨@Pangu 我试图在下面的一些步骤中为您提供解决方案,看看这个,如果您想这样做,请告诉我。谢谢你:) 【参考方案1】:

您可以按照以下步骤实现:

假设您有两个 ViewControllers FirstViewController 顶部有图像,FullImageVC 有图像在中心。

    编写代码以检测点击或在初始图像(顶部)上放置一个 UIButton。 对该 UIButton 的操作或点击图像操作编写一个逻辑以模态呈现一个没有动画的 ViewController FullImageVC。 在 viewWillAppear:FullImageVC 上,您需要为两件事编写逻辑:

第一

将图像放置在FullImageVC 的顶部,就像您将其放置在FirstViewController 中一样,并传递您在FirstViewController 上点击的相同图像,并编写逻辑以从上到中对其进行动画处理。

第二

动画完成后立即显示您的CollectionView,其中将包含所有图像并显示选定的图像。

4.放置十字按钮并编写其操作以关闭FullImageVC

【讨论】:

以上是关于如何在选择时将 UICollectionView 单元格扩展到屏幕的宽度?的主要内容,如果未能解决你的问题,请参考以下文章

在 uicollectionview 上录制时将图像快速传递给详细视图控制器

从 uicollectionView 选择创建 UITableViewCell

点击时将图像设置为 UICollectionView 单元格

UICollectionView 在滚动 Alamofire 时将图像加载到错误的位置

滚动时将部分插入 UICollectionView 时的性能问题

如何在 UICollectionView 中启用选择的视觉反馈