Граница Swift UITableViewCell становится угловой при удалении

#swift #xcode #uitableview #swift5

Вопрос:

Я только что создал представление таблицы и хочу реализовать функцию, которая позволяет пользователю удалять строку. Для этого я реализовал эту функцию:

 func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {  if editingStyle == .delete {  // Zeile löschen (Z.b. dann aus dem Array oder aus dem dauerhaftem CoreData)      tableView.deleteRows(at: [indexPath], with: .fade)  }  }  

Но вы все равно должны знать по моему вопросу, что я настроил свой сотовый с помощью этого кода:

 let cell = tableView.dequeueReusableCell(withIdentifier: "timerCell", for: indexPath) as! timerTableViewCell    cell.layer.borderWidth = 1 // cell.layer.borderColor = CGColor(red: 41 / 255, green: 171 / 255, blue: 226 / 255, alpha: 1)  cell.layer.borderColor = CGColor(red: 0, green: 0, blue: 0, alpha: 1)   cell.textLabel?.text = "Timer"  cell.detailTextLabel!.text = "12:40"  cell.layer.cornerRadius = 18  cell.clipsToBounds = true  cell.layoutMargins.left = 30  cell.layoutMargins.right = 30    return cell  

Но теперь у меня возникла проблема с удалением ячеек и рамки моей ячейки: моя ячейка имеет круглую границу, и если я теперь хочу удалить эту ячейку в своем приложении, граница внезапно становится квадратной и не становится снова круглой даже после отмены удаления. К сожалению, это выглядит очень плохо. Вот скриншоты:

1. 2.

3.

У кого-нибудь когда-нибудь была такая проблема или идеи, и кто мог бы мне помочь?

PS: Я бы хотел, чтобы это выглядело так:

Ответ №1:

Это означало бы, что ячейка CALayer восстанавливается (вероятно, когда размер ячейки изменяется, чтобы отобразить кнопку удаления).

Возможно, вам захочется создать пользовательский класс ячеек представления и переопределить func layoutSublayers(of: CALayer) ячейку (которую он наследует, хотя UIView и CALayerDelegate). Внутри этого метода вы можете вызвать super, а затем установить радиус угла на слое вашего представления.

Комментарии:

1. Привет. Спасибо за ваш ответ! Это работает, но работает не совсем так, как я хотел. Теперь у меня получается, что ячейка снова становится круглой, когда процесс удаления прерывается, но, к сожалению, она все еще становится угловой во время удаления.

Ответ №2:

Теперь я попробовал что-то новое и просто поместил вид на свою ячейку, а затем округлил этот вид вместо ячейки напрямую. Но я всегда получаю сообщение об ошибке с требуемым вводом. Это мой код:

 let view: UIView = {  let view = UIView()  view.backgroundColor = .white  view.layer.borderWidth = 1.5  view.layer.borderColor = CGColor(red: 0, green: 0, blue: 0, alpha: 1)  view.layer.cornerRadius = 18  view.translatesAutoresizingMaskIntoConstraints = false    return view  }()  override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {  super.init(style: .default, reuseIdentifier: "timerCell")  super.awakeFromNib()    setConstrains()  }  func setConstrains() {  self.addSubview(view)   view.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true  view.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true  view.leftAnchor.constraint(equalTo: self.leftAnchor, constant: 0).isActive = true  view.rightAnchor.constraint(equalTo: self.rightAnchor, constant: 0).isActive = true  view.heightAnchor.constraint(equalTo: self.heightAnchor, constant: 0).isActive = true  view.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: 0).isActive = true         }    required init?(coder: NSCoder) {  fatalError("init(coder:) has not been implemented")  }```