使用动态尺寸UICollectionView时如何为特定单元格设置自定义大小
实现方案
你可以通过在自定义布局逻辑中按section区分处理的方式实现需求,操作如下:
- 找到自定义布局中计算单元格尺寸的相关代码,新增section判断逻辑:iOS中UICollectionView的section索引从0开始,你需要特殊处理的第一个section对应索引0,直接返回预设的固定尺寸
CGSize(width: collectionView.bounds.width, height: 100)即可 - 原有瀑布流动态高度计算逻辑仅作用于索引为1的第二个section
- 两个section的内边距、行间距、列数等参数也可以按同样的逻辑区分设置,不需要和原有教程的全局配置保持一致
参考代码示例:
// 自定义布局中计算单元格尺寸的方法 private func calculateItemSize(at indexPath: IndexPath) -> CGSize { // 处理第一个section,返回固定尺寸 if indexPath.section == 0 { return CGSize(width: collectionView!.frame.width, height: 100) } // 原有第二个section的瀑布流尺寸计算逻辑保留 let columnWidth = (collectionView!.frame.width - contentInsets.left - contentInsets.right - interitemSpacing * (columnCount - 1)) / columnCount let imageHeight = 你缓存的对应单元格内容高度 let cellHeight = contentInsets.top + contentInsets.bottom + imageHeight return CGSize(width: columnWidth, height: cellHeight) }
- 如果你没有修改自定义布局的权限,也可以通过实现
UICollectionViewDelegateFlowLayout代理的collectionView(_:layout:sizeForItemAt:)方法,按indexPath返回对应尺寸,该代理返回值的优先级高于布局类的默认配置 - 注意嵌套的水平collectionView需要单独设置其布局为水平滚动的
UICollectionViewFlowLayout,滚动方向设为horizontal即可
内容的提问来源于stack exchange,提问作者bao le
相关产品推荐
相关产品推荐

