如何在gridview中调整单元格大小

时间:2017-02-20 02:03:17

标签: iphone swift layout autolayout

我有一个看起来像这样的网格列表

class ListViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout{

private var collection: ACollection?
private var collectionViewLayout:UICollectionViewFlowLayout?


override func loadView() {
    super.loadView()

    collectionViewLayout = UICollectionViewFlowLayout()
    collectionViewLayout?.itemSize.width = 128
    collectionViewLayout?.itemSize.height = 227
    view = UICollectionView(frame: CGRect.zero, collectionViewLayout: collectionViewLayout!)
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let someObj: SomeObj = collection!.getObject(index: indexPath.item)
    let cell: UICollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: NSStringFromClass(UICollectionViewCell.self), for: indexPath as IndexPath)
    let cellView: UIImageView = UIImageView(image: object.image)

    cellView.frame = cell.bounds
    cell.contentView.addSubview(cellView)
    return cell
}

我希望我的单元格具有不同的宽高比,但取决于someObj中的值。如何在不重叠的情况下调整细胞大小?我试图制作

cellView.frame = CGRect(x:0,y:0,width:100,height:300)
cellView.frame =cell.bounds

但细胞重叠。

1 个答案:

答案 0 :(得分:1)

也许我会详细说明这个问题。

首先,如果您实施collectionView(_:layout:sizeForItemAt:)方法,则无需指定以下内容:

collectionViewLayout?.itemSize.width = 128
collectionViewLayout?.itemSize.height = 227

这是每个单元格的默认大小。

其次,您在每个默认单元格顶部看到的重叠可能是您在重用单元格上添加的cellView s(UIImageView s)。问题是,您每次代表要求提供单元格时,都会尝试在当前单元格上添加UIImageView。您需要检查UIImageView是否已经存在,因为整个单元格可能已经重新使用,但仍然具有之前添加的图像视图。