获取 UICollectionView 部分的框架

Posted

技术标签:

【中文标题】获取 UICollectionView 部分的框架【英文标题】:Get the frame for a UICollectionView section 【发布时间】:2016-06-03 13:56:56 【问题描述】:

如何在UICollectionView 实例中获取整个部分的框架(CGRect 值)? 我知道UITableView 有一个rectForSection: 方法。我正在为UICollectionView 寻找类似的东西。

我检查了UICollectionViewFlowLayout 的文档,但找不到任何类似于rectForSection: 的内容。

【问题讨论】:

看到这个对你有帮助的时候***.com/questions/27011572/… ***.com/questions/12504924/…这个? 重复***.com/questions/27011572/… 抱歉,您发布的链接不相关。我想得到整个部分的矩形,而不仅仅是标题或单元格 【参考方案1】:

到collectionView添加类别

  @implementation UICollectionView (BMRect)

- (CGRect)bm_rectForSection:(NSInteger)section 
    NSInteger sectionNum = [self.dataSource collectionView:self numberOfItemsInSection:section];
    if (sectionNum <= 0) 
        return CGRectZero;
     else 
        CGRect firstRect = [self bm_rectForRowAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:section]];
        CGRect lastRect = [self bm_rectForRowAtIndexPath:[NSIndexPath indexPathForItem:sectionNum-1 inSection:section]];
        return CGRectMake(0, CGRectGetMinY(firstRect), CGRectGetWidth(self.frame), CGRectGetMaxY(lastRect) - CGRectGetMidY(firstRect));
    


- (CGRect)bm_rectForRowAtIndexPath:(NSIndexPath *)indexPath 
    return [self layoutAttributesForItemAtIndexPath:indexPath].frame;


@end

【讨论】:

您的答案似乎全是代码。添加一些词语来描述问题所在和您的解决方案。 @idhong - 看起来您在将代码添加到帖子并使其格式正确时遇到了问题。要正确格式化代码,您需要在每行之前添加四个空格。您也可以粘贴代码,全选,然后在编辑器中按 CTRL-K 以自动为您执行此操作【参考方案2】:

Collection view section frame依赖于collection view layout。它可能是流式布局或自定义布局。所以你不会得到任何预定义的解决方案。但是您可以使用

为您的布局计算它
UICollectionViewLayoutAttributes *attributes = [self.collectionView layoutAttributesForItemAtIndexPath:indexPath];

UICollectionViewLayoutAttributes *attributes = [self.collectionView layoutAttributesForSupplementaryElementOfKind:UICollectionElementKindSectionHeader atIndexPath:indexPath];

我会建议你继承 UICollectionViewLayout 并将你的节框架计算代码放在里面,这样你的节框架将永远是更新的。

注意:如果节起点和终点未垂直对齐,这些点不会给您 rect 的超集。老实说,没有更好的方法来获取节框架。

【讨论】:

感谢您提供补充元素,即标题。很容易错过。

以上是关于获取 UICollectionView 部分的框架的主要内容,如果未能解决你的问题,请参考以下文章

UICollectionView:如何获取部分的标题视图?

如何从子 UICollectionview 中获取 UITableView 的一部分

从 UICollectionView 的 viewForSupplementaryElementOfKind 获取 NSFetchedResultsController 部分对象

如何禁用 UICollectionView 部分之间的单元格拖动?

UICollectionView 与从照片中获取的数据源 - 大量照片的缓慢更新

UICollectionView 中的 UICollectionViewFlowLayout - 每个部分中的动态单元格数