当前位置: 首页 > 知识库问答 >
问题:

CollectionView内TableView内的单元格在首次加载时高度不正确(Swift 4)

蓬祺
2023-03-14

我有一个tableView在几个ColltionView单元格中。每个tableView占据了单元格的全部大小。ColltionView是水平滑动的。

收藏视图:

collectionView.frame = .zero
collectionView.backgroundColor = UIColor.clear
collectionView.dataSource = self as UICollectionViewDataSource
collectionView.delegate = self as UICollectionViewDelegate
collectionViewLayout.scrollDirection = .horizontal
collectionViewLayout.minimumLineSpacing = 0.0
collectionViewLayout.minimumInteritemSpacing = 0.0
collectionViewLayout.estimatedItemSize = CGSize(width: view.frame.width, height: view.frame.height)
collectionView.collectionViewLayout = collectionViewLayout
collectionView.isPagingEnabled = true
collectionView.register(collectionViewCell.self, forCellWithReuseIdentifier: collectionViewCellID)
collectionView.translatesAutoresizingMaskIntoConstraints = false

collectionView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
collectionView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
collectionView.topAnchor.constraint(equalTo: headerView.bottomAnchor).isActive = true
collectionView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true

集合视图单元格内的表视图:

tableView.delegate = self
tableView.dataSource = self
tableView.translatesAutoresizingMaskIntoConstraints = false
tableView.register(tableViewCell.self, forCellReuseIdentifier: "tableViewCell")
tableView.register(tableViewCell.self, forCellReuseIdentifier: "emptyTableViewCell")
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 105

tableView.topAnchor.constraint(equalTo: topAnchor).isActive = true
tableView.bottomAnchor.constraint(equalTo: bottomAnchor).isActive = true
tableView.leftAnchor.constraint(equalTo: leftAnchor).isActive = true
tableView.rightAnchor.constraint(equalTo: rightAnchor).isActive = true

tableView将重新加载到CollectionView的cellForItemAt下,并具有自定义单元格。自定义tableView单元格包含几个小视图,这些视图被添加到名为“cellView”的单个视图中,该视图占据单元格的整个大小:

let cellView = UIView()
addSubview(cellView)
cellView.translatesAutoresizingMaskIntoConstraints = false
cellView.topAnchor.constraint(equalTo: topAnchor).isActive = true
cellView.leadingAnchor.constraint(equalTo: leadingAnchor).isActive = true
cellView.trailingAnchor.constraint(equalTo: trailingAnchor).isActive = true
cellView.bottomAnchor.constraint(equalTo: bottomAnchor).isActive = true

所以……它是这样加载的:

1)加载集合视图

2) 加载集合ViewCell

3) 在CollectionViewCell中加载TableView

4) 重新加载TableView

但是……当它第一次加载TableView的单个单元格时,它们的大小会被缩减:

单元格具有正确高度的唯一方法是重新加载整个CollectionView。一旦发生这种情况,一切都会正确显示。

我认为这可能与估计的RowHeight有关,但我已经调整了它,没有任何影响。就好像tableView在第一次加载时最初将自定义单元格的大小设置为典型的“非自定义”单元格的大小一样。

这是每个tableView单元格应该看起来的样子。

有什么想法吗?

共有2个答案

拓拔烨赫
2023-03-14

我最终在viewDidAppear中重新加载了tableView(而不是collectionView),但它只运行一次(当应用程序启动时)。这解决了问题。

这个链接对tableView单元格的动态高度有一些有趣的想法,但在我的特定案例中没有任何效果。

温开畅
2023-03-14

不确定这是否有帮助,但看起来你的细胞有图像。如果我没有在图像视图中放置占位符图像,那么动态高度单元就会出现问题。

 类似资料:
  • 问题内容: 我有一个tableview单元格,其中添加了collectionview单元格(用于水平滚动)。 现在我想在按下水平collectionview的任何单元格时推送到其他导航控制器。怎么做 ?或如何定义细胞压榨的委托方法。 代码: ViewController.swift: CategoryRow.swift VideoCell.swift 问题答案: 在这里,您将在类上的委托方法上单击

  • 我一直试图通过UIViewController将tableviewcell链接到UIView中的tableview。虽然tableview在那里,但我的自定义tableviewcell没有加载。日志显示单元格已初始化并填充 下面是我在viewcontroller中使用的代码,而tableview已经在UIView中设置好了 ViewController.m

  • 问题内容: 我有一个由用户创建的单元格调用的表视图。每个单元都有文本视图。我想通过“文本视图”的内容更改单元格的高度。这是我尝试的: 问题答案: 绑定您与来自四面八方的使用边际约束。( 前置,顶部和底部的约束 ) 禁用textView滚动 在 viewDidLoad()中 添加以下内容。 这将使您的单元格大小根据您的textview内容大小。 看一下结果: 您无需编写 heightForRowAt

  • 我在我的中添加了一个,并为其制作了一个自定义单元格。 我使用并将每个单元格的高度和宽度都设置为屏幕。因此,从本质上讲,每个单元格都是屏幕宽度的一半,并且高度相同。 然后,我在单元格内部有一个,每个边缘都固定在单元格的相对边缘上,以便图像视图填充单元格。我还有一个,它在单元格中垂直和水平居中。 然而,在第一次加载时,单元格的大小是正确的,但是左上角的一个小方块中的内容要小得多。(如下图所示,我将单元

  • 问题内容: 我给自己添加了一个,并为其创建了一个自定义单元。 我使用方法设置单元格的大小,并将每个单元格设置为高度和宽度。因此,基本上每个单元格都是屏幕宽度的一半,并且高度相同。 然后,我在单元格内部创建了一个单元,每个边缘固定到单元格的相对边缘,以便图像视图填充单元格。我也有一个在单元格中垂直和水平居中的。 但是,在初次加载时,单元格的大小正确,但左上角的小方块中的内容要小得多。(在下图中看到,

  • 我正在用Xcode 10做。我在视图控制器中有一个表视图。 单元格的标签设置为前导、跟踪、顶部和底部,行为0 在ViewDidload()中,我添加了 但是当我点击Viewcontroller时,tableview没有加载正确的高度单元格(需要自动调整大小的单元格没有加载,不需要的单元格被调整大小) 然后我加上这段代码 代码只对最初的几个单元格运行良好,但是当我向下滚动更多的时候(我有大约超过10