UICollectionView 水平滚动导致 section 和 cell 不能纵向布局的问题处理
今天是节前最后一天,明天就是祖国70华诞,写篇博客预祝祖国国泰民安,繁荣昌盛。今天要和大家分享的问题是 当 UICollectionView 的 UICollectionViewLayout 的滑动方向指定为 水平滚动(horizontal)时 导致SectionHeader/SectionFooter 和 列 都一字水平摆开了,不是预期想要的效果。问题如下:
当然要实现水平布局并支持滑动,可以改用UITableView 或者 不加 SectionHeader/SectionFooter,将其加到 UICollection 视图之外,这样cell 水平滚动是没问题的。但总体效果还是有所欠缺。通过调试打印信息,发现 设置 UIEdgeInsets 值 在其他代码不改动的情况下,能到达完美的效果。具体参考代码如下:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
if collectionView == self.childListCollectionView {
return UIEdgeInsets.init(top: child_section_head_top, left: -child_cell_width, bottom: 0, right: 0)
}
return UIEdgeInsets.zero
}
示例中:child_section_head_top 值为cell/section 的高度,UICollectionView 总体高度为其值的2倍。具体设置可根据实际内容设置;child_cell_width 值为整个列及滑动区域的总宽度,不是 UICollectionView 的 width。前面要加负号,否则cell 和 sectionHeader 并列一行显示了。
添加后编译完美效果如下图所示: