UITableView 中的自定义单元格在滑动编辑后立即移动

Posted

技术标签:

【中文标题】UITableView 中的自定义单元格在滑动编辑后立即移动【英文标题】:Custom cell in UITableView shifts right after swipe to edit 【发布时间】:2015-07-28 23:56:58 【问题描述】:

我只想要一个能够向左滑动删除的简单 UITableView。一切正常,除了在我的原型单元格中的 textview 上的正确约束似乎在滑动删除后发生了变化。这是我的表格代码:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 

    //Uses prototype cell from Interface Builder called "CommentTableCell"
    let tableCell = tableView.dequeueReusableCellWithIdentifier("CommentTableCell", forIndexPath: indexPath) as! CommentTableCell
    tableCell.userInteractionEnabled = true
    tableCell.selectionStyle = .None
    //Sets the text for the cells in the comment table
    tableCell.commentText.text = comments[indexPath.row]
    tableCell.timeLabel.text = commentTimes[indexPath.row]

    return tableCell




//As many rows in the table as there are comments
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 

    return comments.count



//Allows the user to delete comments
func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) 

    if (editingStyle == UITableViewCellEditingStyle.Delete) 

        comments.removeAtIndex(indexPath.row)
        commentsTable.deleteRowsAtIndexPaths([indexPath],  withRowAnimation: UITableViewRowAnimation.Automatic)
    

override func viewDidLoad() 
    super.viewDidLoad()

    self.view.layer.borderWidth = 0.75
    self.view.layer.borderColor = borderColor.CGColor
    self.view.layer.cornerRadius = 5.0

    //Gets rid of the line between comment cells
    commentsTable.separatorStyle = UITableViewCellSeparatorStyle.None
    commentsTable.backgroundView = nil

    //Sets the height of the row to fit text boxes
    self.commentsTable.estimatedRowHeight = self.commentsTable.rowHeight
    self.commentsTable.rowHeight = UITableViewAutomaticDimension

    

This 是我向左滑动编辑然后在顶部单元格上向右滑动后的样子(*** 不允许我使用图片)。请注意,每个单元格中灰色文本框和标签的右侧不再对齐。单元格中的灰色文本框的右约束为 -8,所以我也很困惑为什么另一个单元格的文本框有任何边距。

感谢您给我的任何帮助,我对 Swift 还是很陌生!我试图在堆栈溢出时找到类似这个问题的任何内容,但结果是空的。

【问题讨论】:

【参考方案1】:

好的,所以我找到了解决此问题的方法,并认为我会在这里发布,以防其他人遇到同样的问题。

在我看来,它仍然是 XCode 中的一个错误,因为我想不出任何时候您可能想要上述行为。基本上,如果原型单元格中的文本框约束在 Pin 自动布局菜单中设置为“约束到边距”,那么在您滑动删除然后滑动后,右侧的水平约束将随机重置(据我所知)返回。

当您添加这些约束时,只需取消选中对边距的约束,它应该可以解决这个问题!

【讨论】:

以上是关于UITableView 中的自定义单元格在滑动编辑后立即移动的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 可重用的自定义单元格在子视图中显示错误的内容

iOS - 使 UITableView 与自定义单元格在按钮单击时可编辑

UITableView 自定义单元格在 iPad Storyboard 上不起作用,但在 iPhone 上起作用

uitableview 自定义单元格在向下滚动 uitableview 时丢失其内容

使用自定义单元格在两个 UITableView 之间传递数据

UITableView 单元格在向下滚动然后备份后消失