如何根据带有自动调整大小的传入数据在集合视图单元格中添加随机内容(UIKit 元素)?

Posted

技术标签:

【中文标题】如何根据带有自动调整大小的传入数据在集合视图单元格中添加随机内容(UIKit 元素)?【英文标题】:How can I add random content (UIKit element) in collection view cell depending on incoming data with autoresizing? 【发布时间】:2017-03-26 23:49:35 【问题描述】:

在这个函数中,我打开了传入的数据类型,并调用了将子视图添加到我的单元格的函数。目前我还没有数据,我插入了存根。

方法不起作用,结果是textview之后的空白(没有图片),我不知道为什么,我将子视图添加到我的单元格中,理论上它必须有效。现在我不使用开关。我有单元格高度 350 ,标签高度 50 和 textview 高度 50 所以对于图像/视频我保留 250。 请帮我提供建议。

func collectionView(_ collectionView: UICollectionView,
        cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
        let cell =  collectionView.dequeueReusableCell(withReuseIdentifier: "CollectionNews",for: indexPath) as! NewsCell

        cell.personImage.image = UIImage(named: "welder.png")
        cell.textView.layer.cornerRadius = 5
        cell.addSubview(addImage(image : UIImage(named : "error.png")!, for: cell, at : indexPath ))

       //switch (contentArray[indexPath.row])
       //case let image where image is String :
       //cell.addSubview(addImage(image : UIImage(named : "error.png")!, for: cell, at : indexPath ))
       //case let video where video is String :
       //break
       //default:
       //break
       // 

   return cell



func addImage(for cell : NewsCell, at index : IndexPath)->UIImageView
    let testImg = UIImage(named: "error.png")

    let imageForCell = UIImageView(image: testImg)

    imageForCell.autoresizingMask = [UIViewAutoresizing.flexibleWidth , UIViewAutoresizing.flexibleHeight]

    imageForCell.frame = CGRect(x: cell.textView.bounds.minX, y: cell.textView.bounds.maxY + 5, width: imageForCell.frame.origin.x, height: imageForCell.frame.origin.y)

    imageForCell.layer.cornerRadius = 5
    imageForCell.layer.masksToBounds = true

    return imageForCell


func addVideo () 


【问题讨论】:

请检查您的代码:您的 addImage 函数的签名与您在 cellForItemAt.. 中调用的签名不同。 func addImage(image : UIImage, for cell :NewsCell,at index : IndexPath)->UIImageView 【参考方案1】:

首先:我看到函数 addImage 没有将 UIImage 声明为参数

第二:您为 imageForCell 设置了框架属性错误。您应该执行以下操作:(假设您希望您的图片位于 textView 下方)

var newFrame = cell.textView.frame
newFrame.y += 5
imageForCell.frame = newFrame

【讨论】:

问题在这里:“imageForCell.frame = CGRect(x: cell.textView.bounds.minX, y: cell.textView.bounds.maxY + 5, width: imageForCell.frame.origin.x , height: imageForCell.frame.origin.y)" 在这个参数中我使用了 origin : width: imageForCell.frame.origin.x, height: imageForCell.frame.origin.y。你说得对,最好使用你的框架分配方法

以上是关于如何根据带有自动调整大小的传入数据在集合视图单元格中添加随机内容(UIKit 元素)?的主要内容,如果未能解决你的问题,请参考以下文章

UICollectionViewCell 的高度,带有 2 个多行 UILabel / 自调整大小的集合视图单元格

如何通过自动布局设置集合视图单元格大小

无法使用自动布局将简单的自行调整大小的集合视图单元格调整为标签大小

自动调整UICollectionView高度以调整其内容大小

UICollectionView 总是自动调整单元格大小。不使用委托返回的尺寸

调整单元格大小时如何使表格视图动画平滑