如何获取原型UICollectionViewCell的实例,以便我可以拥有可变大小的集合视图单元格?

时间:2014-05-10 13:52:22

标签: ios layout size uicollectionview

我试图制作宽度根据其内容而变化的UICollectionViewCells。我找到了一个关于这个主题的优秀教程:Variable-Sized Items in UICollectionView但让读者想知道该技术应用于到故事板

  

另一种方法 - 在某些方面更方便 - 方法是在故事板中使用集合视图。在那里,单元原型不会位于单独的XIB文件中,而是位于集合视图的结构层次结构中。探索如何获得一个尺寸单元,留给读者一个练习。

本教程本身使用XIB,但不清楚如何从故事板中获取sizingCell,如作者所称。

3 个答案:

答案 0 :(得分:0)

在自定义布局或流程布局符合UICollectionViewDelegateFlowLayout Protocol并实施collectionView:layout:sizeForItemAtIndexPath:

然后返回您想要该项目的大小。

https://developer.apple.com/library/ios/documentation/uikit/reference/UICollectionViewDelegateFlowLayout_protocol/Reference/Reference.html#//apple_ref/occ/intfm/UICollectionViewDelegateFlowLayout/collectionView:layout:sizeForItemAtIndexPath

答案 1 :(得分:0)

遗憾的是,我能看到实现这一目标的唯一明显方法是为所有单元格制作单独的Xib,并自己手动将它们注册到集合视图中。

然后,您还可以使用UINib实例来实例化单元格以进行项目大小调整。

UINib * nib = [UINib nibWithNibName:NSStringFromClass([JDPCell class])
                             bundle:nil];
[self.collectionView registerNib:nib
      forCellWithReuseIdentifier:JDPCellReuseIdentifier];

id cell = [[nib instantiateWithOwner:nil options:nil] firstObject];
self.prototypeCells[JDPCellReuseIdentifier] = cell;

然后在

-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewFlowLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{
    NSString * reuseIdentifier = ...;
    UICollectionViewCell * cell = self.prototypeCells[reuseIdentifier];
    [cell updateConstraints];
    return cell.frame.size;
}

答案 2 :(得分:0)

我认为我们可以以编程方式获取新单元格,然后添加相同的子视图和约束。 但它只是一个旁路,任何人都有更好的主意?