Я пытаюсь удалить строку в виде таблицы.Когда строка удалена, табличное представление должно измениться, чтобы в табличном представлении не было пустой строки.Вот как это выглядит перед удалением любых строк:
![enter image description here](https://i.stack.imgur.com/91t9O.png)
Вот как это выглядит, когда собирается удалить строку:
Вот как это выглядит после удаления строки:
![enter image description here](https://i.stack.imgur.com/L3hjp.png)
Не должно быть этой лишней пустой строки после удаления четвертой строки.Как мне избавиться от этого лишнего ряда?
Вот мой код в настоящее время.Как видите, размер табличного представления корректируется динамически.Общий размер просмотра таблицы зависит от того, есть ли 4 элемента (как показано на первом изображении) или 6 элементов.В обоих случаях до того, как произойдет удаление, в таблице не будет лишних строк (поэтому в первом случае всего 4 строки, а во втором - только 6 строк).Кроме того, кнопка должна быть на 80 пикселей ниже конца таблицы.Когда строка удаляется, кнопка перемещается правильно, как вы можете видеть, что кнопка переместилась вверх от изображений 2 до 3. Однако, все равно выглядит, что в табличном представлении есть дополнительная строка.
@IBOutlet var tableView: UITableView!
@IBOutlet var newButton: UIButton!
var items: [String] = ["Swift", "Is", "So", "Amazing"]
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.items.count;
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell:UITableViewCell = self.tableView.dequeueReusableCell(withIdentifier: "Cell") as! UITableViewCell
// Make sure the table view cell separator spans the whole width
cell.preservesSuperviewLayoutMargins = false
cell.separatorInset = UIEdgeInsets.zero
cell.layoutMargins = UIEdgeInsets.zero
cell.textLabel?.text = self.items[indexPath.row]
return cell
}
override func viewWillAppear(_ animated: Bool) {
// Adjust the height of the tableview
tableView.frame = CGRect(x: tableView.frame.origin.x, y: tableView.frame.origin.y, width: tableView.frame.size.width, height: tableView.contentSize.height)
// Add a border to the tableView
tableView.layer.borderWidth = 1
tableView.layer.borderColor = UIColor.black.cgColor
}
// This function is used for adjusting the height of the tableview
override func viewDidLayoutSubviews(){
tableView.frame = CGRect(x: tableView.frame.origin.x, y: tableView.frame.origin.y, width: tableView.frame.size.width, height: tableView.contentSize.height)
tableView.reloadData()
//Get the current height of the tableview
var tableViewHeight = self.tableView.contentSize.height
var tableViewEnding = 134 + tableViewHeight
var buttonPlacement = tableViewEnding + 80
// The New Button is 80 points below the ending of the tableView
newButton.frame.origin.y = buttonPlacement
print("Table View Height: \(tableViewHeight)")
}
// Allow cell deletion in tableview
func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
let delete = UITableViewRowAction(style: .destructive, title: "Delete") { (action, indexPath) in
// delete item at indexPath
self.items.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .fade)
self.viewDidLayoutSubviews()
print(self.items)
print("Number of rows: \(tableView.numberOfRows(inSection: 0))")
}
delete.backgroundColor = UIColor.blue
return [delete]
}