为啥 UITableView 中的单元格会相互重叠?

Posted

技术标签:

【中文标题】为啥 UITableView 中的单元格会相互重叠?【英文标题】:Why would cells overlap each other in UITableView?为什么 UITableView 中的单元格会相互重叠? 【发布时间】:2017-02-14 13:18:48 【问题描述】:

我的应用程序有数十个表格视图,它们都可以正常工作,除了一个相对较长的表格,如果我添加一个单元格作为最终单元格,它会因重叠而重复。

我检查了表格源,它有一个这种类型的单元格,为什么会重复?

我使用这种常用的方式来按名称调用单元格

let cell = tableView.dequeueReusableCellWithIdentifier(cellName, forIndexPath: indexPath)

所有刷新后,您可以看到一个“reportPlace” id,为什么所有这些重复。

items = [["similarPlace", "similarPlace", "similarPlace", "reportPlace"]]

--

免责声明:我检查了所有提到的类似问题的解决方案

【问题讨论】:

让 cell = tableView.dequeueReusableCellWithIdentifier("Songcell", forIndexPath: indexPath) 你的视图控制器代码可以吗? 根据最后一个单元格检查单元格高度,如果您已采用自定义视图,则 MichaelRose:这是一个 2k 行的代码,我没有做任何不寻常的事情,它在其他视图中总是对我有用,我认为这是一个 xcode 错误... HimanshuMoradiya:我已经这样做了 @EricAya 指出,谢谢。 【参考方案1】:

解决方案:只确定一次高度。

我多次设置单元格的高度导致了这个问题:

self.tableView?.rowHeight   = 60.0
self.tableView?.rowHeight   = 100.0

我以为它会占用最后一个,但看起来每个都创建了一个单元格的实例。

另外,不要重新加载表格超过需要的次数。 并且不要更改cellForRowAtIndexPath 方法中的源数据。

【讨论】:

我在 tableview-prepare-method 中设置了tableview.estimatedRowHeight,这让我很难解决这个问题。【参考方案2】:

我遇到了同样的问题,不知道为什么会发生这种情况(y 位置设置错误),但我做了一个小“破解”,为我解决了这个问题

如果您以编程方式创建单元格,只需在单元格类的 init 中执行此操作:

override init(frame: CGRect) 
  let noProblemFrame = CGRect(x: 0, y: 0, width: frame.width, height: frame.height)
  super.init(frame: noProblemFrame)

否则在awakeFromNib中做同样的事情

override func awakeFromNib() 
   let noProblemFrame = CGRect(x: 0, y: 0, width: frame.width, height: frame.height)
   frame = noProblemFrame

【讨论】:

谢谢,老实说我没有尝试过,为我解决的问题是我添加的答案。【参考方案3】:

我尝试了以上所有答案,但除了 Sandu 的答案外,没有任何效果,这成功了!

// Working solutions, any value will do
self.tableView.estimatedRowHeight = 200

【讨论】:

以上是关于为啥 UITableView 中的单元格会相互重叠?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 UITableViewCell 相互重叠?

为啥当我在同一行中编辑另一个单元格时,此数据表单元格会恢复为旧值?

UITableView 中的自定义单元格重叠

UITableView 中的自定义单元格使图像在滚动时重叠

为啥在 iOS 中显示为 PDF 时,具有居中文本的底部表格单元格会被截断?

带有 SearchView 的 UITableView 使新单元格在搜索时与旧单元格重叠