为啥 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 中的单元格会相互重叠?的主要内容,如果未能解决你的问题,请参考以下文章
为啥当我在同一行中编辑另一个单元格时,此数据表单元格会恢复为旧值?