获取 UIScrollView 内的 UICollectionView 高度

Posted

技术标签:

【中文标题】获取 UIScrollView 内的 UICollectionView 高度【英文标题】:Get UICollectionView height inside UIScrollView 【发布时间】:2017-08-08 14:47:38 【问题描述】:

我在滚动视图中有一个 UICollectionView,它的单元格具有动态宽度和静态高度。

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section 
    return tagArray.count;


- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath

    TagsCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"tagsCollectionViewCell" forIndexPath:indexPath ];
    [cell bindWithModel:tagArray[indexPath.row]];

    return cell;


- (CGSize)collectionView:(UICollectionView *)collectionView
                  layout:(UICollectionViewLayout *)collectionViewLayout
  sizeForItemAtIndexPath:(NSIndexPath *)indexPath

    CGSize yourLabelSize = [tagArray[indexPath.row] sizeWithAttributes:@NSFontAttributeName : [UIFont systemFontOfSize:17.0f]];

    return CGSizeMake(yourLabelSize.width+20+40, 40);


我可以使用以下方法计算高度:

CGFloat height = self.collectionView.collectionViewLayout.collectionViewContentSize.height;

我得到的值高于实际高度。

【问题讨论】:

【参考方案1】:
collectionView:layout:sizeForItemAtIndexPath:

向代理询问指定项目单元格的大小。

CGFloat height = self.collectionView.collectionViewLayout.collectionViewContentSize.height

这将返回 collectionView 的高度,而不是 collectionView Cell 的高度。

【讨论】:

我没听明白。 CollectionView 高度与单个collectionviewcell 的高度不同。这里使用的委托方法是返回collectionviewcell的大小。 我假设您将静态单元格高度 (40) 与 collectionViewContentSize.height 进行比较。 不,我是使用 self.collectionView.collectionViewLayout.collectionViewContentSize.height 查找高度,而不是委托 我需要collectionview的准确高度,因为它在滚动视图内。单元格的数量是动态的,单元格的宽度是动态的。

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

UIScrollView 内的 UIScrollView 时滚动

分页 UIScrollView 内的 UIScrollView

限制 UIScrollView 内的 UILabel 的高度

UIScrollview 内的 UIView 内的 UILabel 上的 UIGestureRecognizer

UIScrollview内的UIView内的UIButton,ARC问题

Swift - 通过点击 ScrollView 内的 ViewController 内的按钮来滚动 UIScrollView