我尝试使用新方法trailingSwipeActionsForRowAt
和leadingSwipeActionsConfigurationForRowAt
来显示带有图标的行动...
不幸的是,当我在拖尾滑动后将设备从横向旋转到纵向时,我面临着一个奇怪的错误。
这是我的代码
var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView = UITableView()
tableView.delegate = self
tableView.dataSource = self
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
tableView.estimatedRowHeight = 100
view.addSubview(tableView)
tableView.translatesAutoresizingMaskIntoConstraints = false
tableView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
tableView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
tableView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 15
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as UITableViewCell
cell.textLabel?.text = "\(indexPath.row)"
cell.detailTextLabel?.text = "\(indexPath.row)"
cell.backgroundColor = .lightGray
return cell
}
func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
return true
}
@available(iOS 11.0, *)
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration?
{
let deleteAction = UIContextualAction(style: .normal, title: "") { (action, view, handler) in
print("Delete Action Tapped")
}
deleteAction.backgroundColor = .red
deleteAction.image = UIImage(named: "icons8-info-50")
let defaultAction = UIContextualAction(style: .normal, title: nil) { (action, view, handler) in
print("default Action Tapped")
}
defaultAction.backgroundColor = .orange
defaultAction.image = UIImage(named: "icons8-info-50")
let swipeAction = UISwipeActionsConfiguration(actions: [deleteAction, defaultAction])
swipeAction.performsFirstActionWithFullSwipe = false
return swipeAction
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 100
}
@available(iOS 11.0, *)
func tableView(_ tableView: UITableView, leadingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
let deleteAction = UIContextualAction(style: .normal, title: "") { (action, view, handler) in
print("Delete Action Tapped")
}
deleteAction.backgroundColor = .blue
deleteAction.image = UIImage(named: "icons8-info-50")
let swipeAction = UISwipeActionsConfiguration(actions: [deleteAction])
swipeAction.performsFirstActionWithFullSwipe = false
return swipeAction
}
有什么想法吗?
由于
答案 0 :(得分:1)
请参见this question。
您可以重置单元格的编辑状态,以便不再使用setEditing(_:animated:)
中的viewWillTransition(to:with:)
来显示操作,而旋转设备时会调用该操作。
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransition(to: size, with: coordinator)
tableView.setEditing(false, animated: true)
}
仅当您在协调器的setEditing(_:animated:)
方法的外部处调用animate
时,此方法才有效。在animation
块中将edit设置为false无效。