【发布时间】:2017-02-21 10:33:17
【问题描述】:
我需要使用不同大小(1x1、2x2、2x1、3x2.5)的单元格创建一个UICollectionView。我已经编写了代码来根据它们使用的大小添加单元格collectionView:layout:sizeForItemAtIndexPath:。
这是预期结果(单元格 1 和 3 必须位于单元格 2 的左侧):
我的(丑陋的)当前代码是(self.cellSize = screen width / 3):
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
CGFloat size = self.cellSize;
if (indexPath.item == 0) {
return CGSizeMake(self.cellSize * 3.f, self.cellSize * 2.5f);
}
if (indexPath.item == 1) {
return CGSizeMake(self.cellSize, self.cellSize);
}
if (indexPath.item == 2) {
return CGSizeMake(self.cellSize * 2.f, self.cellSize * 2.f);
}
if (indexPath.item == 3) {
return CGSizeMake(self.cellSize, self.cellSize);
}
if (indexPath.item == 4) {
return CGSizeMake(self.cellSize * 2.f, self.cellSize);
}
if (indexPath.item == 5) {
return CGSizeMake(self.cellSize, self.cellSize);
}
if (indexPath.item == 6) {
return CGSizeMake(self.cellSize, self.cellSize);
}
if (indexPath.item == 7) {
return CGSizeMake(self.cellSize * 2.f, self.cellSize);
}
if (indexPath.item == 8) {
return CGSizeMake(self.cellSize * 3.f, self.cellSize * 2.5f);
}
return CGSizeMake(size, size);
}
有没有办法指定单元格 3 必须在单元格 1 上方,但在单元格 2 的左侧?
我不想做一个不会改变的静态布局,因为每个单元格将来可能有不同的大小。例如,单元格 2 可以是 2x1 大小...
这样做的最佳方法是什么?我期待为UICollectionViewLayout 指定一个流程(如“从顶部”),但它不是那样工作的......
【问题讨论】:
-
我认为你必须继承
UICollectionViewLayout的子类,你会给每个单元格一个框架。
标签: ios objective-c uicollectionview