我有一个有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)
先谢谢你
使用下面的方法,我想它会解决你的问题:-。
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 50.0 // height of the row (Eg. 50.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
}
如果你需要根据内容来改变高度,请告诉我内容是什么,这样我就可以帮助你。