Swift 为什么当我的tableView跳出视图时单元格会向右移动?

Swift 为什么当我的tableView跳出视图时单元格会向右移动?,swift,Swift,我添加了一个带有所有结构及其子结构的表视图,以方便导航。但是每次我的表视图从我的视图中跳出时,我的单元格都会向右移动。我上传了一篇文章来说明我的问题。 是完整的源代码 有人知道为什么会发生这种情况?表视图单元格被重用。这意味着,当您调用dequeueReusableCell(with identifier:)时,有时旧的单元格将被排挤出队列。每当表格视图需要显示一个新单元格时,它都会调用cellForRowAt,然后在其中配置一个单元格并返回它。您需要记住,您正在配置的单元可能是旧单元 有问

我添加了一个带有所有结构及其子结构的表视图,以方便导航。但是每次我的表视图从我的视图中跳出时,我的单元格都会向右移动。我上传了一篇文章来说明我的问题。 是完整的源代码



有人知道为什么会发生这种情况?

表视图单元格被重用。这意味着,当您调用
dequeueReusableCell(with identifier:)
时,有时旧的单元格将被排挤出队列。每当表格视图需要显示一个新单元格时,它都会调用
cellForRowAt
,然后在其中配置一个单元格并返回它。您需要记住,您正在配置的单元可能是旧单元

有问题的代码行如下所示:

cell.spacingViewWidthConstraint.constant = cell.spacingViewWidthConstraint.constant * CGFloat(self.depthDictionary[structure.id]!)
如果
cell
是一个旧单元格,则其
spacingViewWidthConstraint.constant
在第一次配置时就已经设置好了,因此现在再次增加它,当它第二次显示时,这会导致它进一步向右移动

您应该将
cell.spacingviewidthconstraint.constant
替换为一个(命名的)常量,例如
10
(或者无论
cell.spacingviewidthconstraint.constant
的初始值是什么),这样每次调用该方法时,变量都不会设置得越来越大:

cell.spacingViewWidthConstraint.constant = 10 * CGFloat(self.depthDictionary[structure.id]!)
cell.spacingViewWidthConstraint.constant = cell.spacingViewWidthConstraint.constant * CGFloat(self.depthDictionary[structure.id]!)
cell.spacingViewWidthConstraint.constant = 10 * CGFloat(self.depthDictionary[structure.id]!)