Добавьте отступ в действия свайпов UITableView - PullRequest
0 голосов
/ 28 октября 2019

Я хочу добиться действия UITableView смахивания следующим образом: enter image description here

Но так я и закончил: (Пожалуйста, не обращайте внимания, что текст и изображения разные) enter image description here

Я хочу, чтобы ячейки второго уровня имели отступы (между краем ячейки и краем табличного представления есть пространство), и я добился этого, изменив рамку ячейки. Это выглядело хорошо, если вы не проводите пальцем по камере. Однако, когда я добавил действие смахивания к ячейке, поле действия смахивания развернулось за пределы ячейки до края представления таблицы.

Вот код, как я изменил кадр ячейки:

class BPAnalysisDetailsTableViewCell: UITableViewCell {

    private let cellLeadingInset: CGFloat = 50
    private let cellTrailingInset: CGFloat = 50

    override var frame: CGRect {
        get {
            return super.frame
        }
        set (newFrame) {
            var frame = newFrame
            frame.origin.x += cellLeadingInset
            frame.size.width -= (cellLeadingInset + cellTrailingInset)
            super.frame = frame
        }
    }

    override func awakeFromNib() {
        super.awakeFromNib()
        self.selectionStyle = .none
    }

}

А для конфигурации действия смахивания:

func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
 .... // logics for determining which row to add swipe action
 let editAction = contextualActionFor(indexPath: indexPath, type: .analysisEdit, arrayIndex: analysisIndex)
 let deleteAction = contextualActionFor(indexPath: indexPath, type: .analysisDelete, arrayIndex: analysisIndex)
 return UISwipeActionsConfiguration(actions: [editAction, deleteAction])
}

func contextualActionFor(indexPath: IndexPath, type: SwipeActionType, arrayIndex: Int? = nil ) -> UIContextualAction {
    switch type {
    case .analysisEdit:
        guard let analysisIndex = arrayIndex else { return UIContextualAction() }
        let action = UIContextualAction(style: .normal, title: nil, handler: { (_, _, completionHandler) in
            let editingActionIndexPath = IndexPath(row: analysisIndex, section: indexPath.section)
            BPWizardChildView.userInteractionIndexPath = editingActionIndexPath
            let destination = UIStoryboard(storyboard: .BPProgressWizard).instantiateViewController(withIdentifier: BPProgressContainerViewController.self)
            self.navigationController?.pushViewController(destination, animated: true)
            completionHandler(true)
        })
        action.image = editActionImage
        action.backgroundColor = UIColor.cellSwipeActionLightGray
        return action
    case .analysisDelete:
        let action =  UIContextualAction(style: .normal, title: nil, handler: { (_, _, completionHandler) in
            if let analysisIndex = arrayIndex, let analysis = self.bpViewModel.currentBusinessPlan?.keyCenterFocuses[indexPath.section - 1].analyses[analysisIndex] {
                self.delete(record: analysis)
            }
            completionHandler(true)
        })
        action.image = deleteActionImage
        action.backgroundColor = UIColor.cellSwipeActionLightGray
        return action
    }
}

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

...