trailingSwipeActions和旋转问题

问题描述 投票:2回答:1

我试图实现新的方法trailingSwipeActionsForRowAtleadingSwipeActionsConfigurationForRowAtto显示行动图标...

不幸的是,当我在拖尾滑动后将设备从横向旋转到纵向时,我面临着一个奇怪的错误。

这是我的代码

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
}

景观模式:enter image description here

然后切换到纵向模式:enter image description here

有任何想法吗?

谢谢

swift uitableview swipe ios11
1个回答
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块中将编辑设置为false将不起作用。

© www.soinside.com 2019 - 2024. All rights reserved.