如何通过代码基于Left Aligned collection View Flow Layout为UICollectionView添加Section Insets?
问题原因
- 你当前设置的
contentInset是整个UICollectionView滚动内容区域的全局外边距,并不是针对Section的边距,搭配自定义Left Aligned Flow Layout使用时,布局逻辑会优先读取Flow Layout的section边距配置,因此该设置不会生效。 - 你代码中定义的UICollectionView变量名为
collection,设置边距时使用的变量名是collectionView,变量不匹配也会导致配置无法生效。
正确实现方案
方案1:所有Section使用统一边距
直接获取CollectionView的布局对象,给sectionInset属性赋值即可:
if let layout = collection.collectionViewLayout as? UICollectionViewFlowLayout { // 自定义左对齐布局只要继承自UICollectionViewFlowLayout,该赋值同样生效 layout.sectionInset = UIEdgeInsets(top: 60, left: 0, bottom: 0, right: 0) }
方案2:不同Section需要设置不同边距
实现UICollectionViewDelegateFlowLayout代理方法,按Section返回对应边距:
extension 你的控制器类名: UICollectionViewDelegateFlowLayout { func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets { // 可根据section索引自定义不同Section的边距,示例为所有Section设置顶部60的边距 return UIEdgeInsets(top: 60, left: 0, bottom: 0, right: 0) } }
注意:如果你的自定义Left Aligned Flow Layout重写了section边距的计算逻辑,需要同步调整自定义布局类内的计算规则,外部配置才能生效。
内容的提问来源于stack exchange,提问作者Pinal
相关产品推荐
相关产品推荐

