max*_*lxb 9 objective-c ios uicollectionview
我有一个包含6个部分的CollectionView.
第一部分按行组织.第2和第3节是事情变得困难的地方.我需要将两个部分放在一起.
[................第1节..............] //一节有两排
[...第2节. ..] [...第3节......] //第一节下方的两个部分
我不能将第二部分分成两列,因为它们不同,填充了不同的单元格.
知道流布局总是填充从边界到边界的一个部分,我只能通过将两个单元格放在一起来伪造这样的效果,这很好,但是我添加了单元格,我只能用一个整数放在另一个下面每当我在cellForItemAtIndexPath中创建一个新单元格时,它会递增,并使用它乘以单元格的高度.
我面临的唯一问题是当我重用一些单元格时,整数变量hack不再起作用.
那么除了自定义布局之外,还有一种更好的方法可以将两个部分放在一起吗?
提前致谢
您不一定必须编写自定义布局,实际上您可以仅子类化UICollectionViewFlowLayout并重写确定框架定位的几个关键方法,即layoutAttributesForElementsInRect:/layoutAttributesForItemAtIndexPath:您可以在其中检查部分并确定位置。
代码本身可能相对简单,大致如下:
if indexPath.section == 0 {
attributes.frame = CGRect(x: 0, y: 0, width: fullWidth, height: someHeight)
} else {
// Section 2 which is indexed at 1, set the frame
// to half the width and x to 0
if indexPath.section %2 != 0 {
attributes.frame = CGRect(x: 0, y: someYCounter, width: halfWidth, height, someHeight)
} else {
attributes.frame = CGRect(x: halfWidth, y: someYCounter, width: halfWidth, height, someHeight)
}
}
Run Code Online (Sandbox Code Playgroud)
显然这是伪代码,我还没有通过编译器运行它,但基本步骤是:
halfWidthand fullWidth(稍后布局时使用)y仓位解决此问题的最佳方法是覆盖准备并计算布局属性数组(并将其存储为实例变量)。然后,layoutAttributesForItemAtIndexPath:等等,只需返回该数组中索引处的对象(或者如果索引由于某种原因超出范围,则返回super.layoutAttributesForItem(at: indexPath).
这就是 的美妙之处UICollectionViewFlowLayout,大部分繁重的工作都已为您完成,您可以子类化一些简单的方法来获得所需的行为。另一种选择是完全成熟的自定义布局,在我看来,这种布局很少合理,除非你有一些疯狂的行为,在这种情况下,你应该与你的设计师讨论他们所做的复杂性。
| 归档时间: |
|
| 查看次数: |
1356 次 |
| 最近记录: |