Я хочу добиться действия UITableView смахивания следующим образом: ![enter image description here](https://i.stack.imgur.com/2Bh5b.png)
Но так я и закончил: (Пожалуйста, не обращайте внимания, что текст и изображения разные) ![enter image description here](https://i.stack.imgur.com/eVD5r.png)
Я хочу, чтобы ячейки второго уровня имели отступы (между краем ячейки и краем табличного представления есть пространство), и я добился этого, изменив рамку ячейки. Это выглядело хорошо, если вы не проводите пальцем по камере. Однако, когда я добавил действие смахивания к ячейке, поле действия смахивания развернулось за пределы ячейки до края представления таблицы.
Вот код, как я изменил кадр ячейки:
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
}
}
Пожалуйста, дайте мне несколько мыслей, как добавить отступ в действие смахивания, чтобы оно не было выровнено по правому краю таблицыПосмотреть. Спасибо!