删除项目uitableview swift 4的正确方法

时间:2020-05-09 20:29:40

标签: ios swift xcode swift4

我有一个带有3个部分(3个单元格)的UitableView,在第1部分中有一个项目列表,用户可以使用按钮进行删除,所有删除过程都很好,但是当我删除一个项目时; uitableview到达顶部和底部(类似于重新加载视图),我想要

当用户删除项目时,仅从位置删除这是我的代码

    func numberOfSections(in tableView: UITableView) -> Int {
        return 3
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        var value: Int = 0
        if(section == 0){
            value = 1
        }else if(section == 1){
            value = items.count //20
        }else if(section == 2){
            value = 1
        }
        return value
    }

    @objc func delete_item(sender: UIButton){
        let point = sender.convert(CGPoint.zero, to: tv_items)
        guard let indexPath = tv_items.indexPathForRow(at: point) else{
            return
        }
        tv_items.beginUpdates()
        self.items.remove(at: indexPath.row)
        tv_items.deleteRows(at: [indexPath], with: .fade)
        tv_items.endUpdates()
    }


    cell.btn_delete.tag = indexPath.row
    cell.btn_delete.addTarget(self, action: #selector(delete_item), for: .touchUpInside)

预先感谢

2 个答案:

答案 0 :(得分:0)

如果您使用的是estimatedHeightForRowAt,请禁用它并使用heightForRowAt功能。

或者,在endUpdates()之后使用它:

tv_items.scrollToRow(at: indexPath, at: .top, animated: false)

如果行高度恒定,则可以使用:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return 80 // or any constant height
}

如果您需要根据内容的高度而变化,莱姆就知道内容是什么,以便我提供帮助。

答案 1 :(得分:0)

使用以下方法,我认为它将解决您的问题:-

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
return 50.0 // height of the row (Eg. 50.0)
}