如何在 uitableviewcell 中设置 uicollectionview 的高度?

Posted

技术标签:

【中文标题】如何在 uitableviewcell 中设置 uicollectionview 的高度?【英文标题】:How to set the height of a uicollectionview inside an uitableviewcell? 【发布时间】: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(); 

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

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

【问题讨论】:

试试这个链接:***.com/questions/48093595/… 试试这个解决方案 -> ***.com/questions/46724530/… 需要您的单元格线框布局 我很好奇,您尝试创建什么需要将 UICollectionView 嵌入到 UITableViewCell 中?也许有更好的方法来实现你想要的:) 您是否尝试过在UICollectionView 中使用自定义补充视图作为标题? 【参考方案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(); ' 在返回单元格之前。

以上是关于如何在 uitableviewcell 中设置 uicollectionview 的高度?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UITableViewCell 中设置 UIButton 状态?

如何在swift中设置自定义UITableviewcell的动态高度

如何在 iOS 中使用 CAGradientLayer 在 UITableViewCell 中设置多个渐变颜色?

如何使用 AutoLayout 在一个 UITableView 中设置具有两个原型的 UITableViewCell 的 AutoHeight?

如何使用自动布局在一个宽度相同的 uitableviewcell 中设置八个 uilabel

在 UITableViewCell 中设置 textLabel 的宽度