要通过collectionView(_:layout:sizeForItemAt:)方法调整UICollectionView单元格的大小,可以实现UICollectionViewDelegateFlowLayout协议,并实现sizeForItemAt方法。在方法中,根据需要的大小计算并返回每个单元格的大小。
以下是一个解决方案的示例代码:
class ViewController: UIViewController, UICollectionViewDelegateFlowLayout {
// 创建一个UICollectionView
var collectionView: UICollectionView!
// 定义单元格大小
let cellWidth: CGFloat = 100
let cellHeight: CGFloat = 100
override func viewDidLoad() {
super.viewDidLoad()
// 设置布局
let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .vertical
// 初始化UICollectionView
collectionView = UICollectionView(frame: view.bounds, collectionViewLayout: layout)
collectionView.backgroundColor = .white
// 设置代理为当前视图控制器
collectionView.delegate = self
// 注册自定义单元格
collectionView.register(MyCollectionViewCell.self, forCellWithReuseIdentifier: "Cell")
// 添加到视图中
view.addSubview(collectionView)
}
// 实现sizeForItemAt方法来调整单元格大小
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: cellWidth, height: cellHeight)
}
// ... 其他UICollectionViewDelegateFlowLayout方法的实现
}
class MyCollectionViewCell: UICollectionViewCell {
// 自定义单元格的内容
}
在这个示例中,我们实现了UICollectionViewDelegateFlowLayout协议,并在sizeForItemAt方法中返回了所需的单元格大小。这样,在不调用reloadData()的情况下,每个单元格的大小将根据返回值进行调整。