我有一个看起来像这样的网格列表
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
但细胞重叠。
答案 0 :(得分:1)
也许我会详细说明这个问题。
首先,如果您实施collectionView(_:layout:sizeForItemAt:)
方法,则无需指定以下内容:
collectionViewLayout?.itemSize.width = 128
collectionViewLayout?.itemSize.height = 227
这是每个单元格的默认大小。
其次,您在每个默认单元格顶部看到的重叠可能是您在重用单元格上添加的cellView
s(UIImageView
s)。问题是,您每次代表要求提供单元格时,都会尝试在当前单元格上添加UIImageView
。您需要检查UIImageView
是否已经存在,因为整个单元格可能已经重新使用,但仍然具有之前添加的图像视图。