【问题标题】:How to set the height of a uicollectionview inside an uitableviewcell?如何在 uitableviewcell 中设置 uicollectionview 的高度?
【发布时间】:2018-01-17 10:25:25
【问题描述】:

我有一个视图控制器,它管理 uitableviewcells 中带有 uicollectionviews 的 uitableview。

但是,uicollectionviews 可能包含不同数量的项目。 因此我需要调整 uicollectionviews 的高度。

但是当我尝试这样做时,其他 uicollectionviews 的高度也会改变。

uicollectionview 受一个 IBOutlet 的约束,以及对 collection view 高度的约束。

我正在设置 collectionview 的高度 tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath):

cell.collectionView.reloadData();
cell.collectionViewHeight.constant = cell.collectionView.collectionViewLayout.collectionViewContentSize.height;
cell.collectionView.setNeedsLayout();
cell.collectionView.layoutIfNeeded(); 

首先我重新加载数据,然后设置高度约束,最后应用新布局。

起初这似乎有效 - 但我认识到其他单元格也受到影响 - 可能是因为我正在使可重复使用的单元格出列。 但是我怎样才能改变我的代码,让它工作呢?

【问题讨论】:

标签: ios swift uitableview uicollectionview nslayoutconstraint


【解决方案1】:

你应该实现'tableView:heightForRowAtIndexPath:'

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {

    return 50.0
    // Or customize the way you want using the indexPath
}

或者对于 UICollectionView 'collectionView:sizeForItemAtIndexPath:'

func collectionView(_ collectionView: UICollectionView,
                        layout collectionViewLayout: UICollectionViewLayout,
                        sizeForItemAt indexPath: IndexPath) -> CGSize {

        return CGSize(width: widthPerItem, height: heightPerItem)
    }

【讨论】:

  • 我需要可变高度的行。而这些高度取决于包含的collectionview的高度。
  • 好的,我明白了。我已经完成了更新单元格中内容的约束,然后使用 'cell.layoutIfNeeded(); ' 在返回单元格之前。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-30
  • 2019-08-18
  • 2019-10-12
  • 2019-07-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多