Это старый вопрос, но вот решение, которое протестировано и работает с iOS 8 до 11 .
В вашем подклассе UITableViewCell попробуйте следующее:
class MyTableViewCell: UITableViewCell {
weak var reorderControl: UIView?
override func layoutSubviews() {
super.layoutSubviews()
// Make the cell's `contentView` as big as the entire cell.
contentView.frame = bounds
// Make the reorder control as big as the entire cell
// so you can drag from everywhere inside the cell.
reorderControl?.frame = bounds
}
override func setEditing(_ editing: Bool, animated: Bool) {
super.setEditing(editing, animated: false)
if !editing || reorderControl != nil {
return
}
// Find the reorder control in the cell's subviews.
for view in subviews {
let className = String(describing: type(of:view))
if className == "UITableViewCellReorderControl" {
// Remove its subviews so that they don't mess up
// your own content's appearance.
for subview in view.subviews {
subview.removeFromSuperview()
}
// Keep a weak reference to it for `layoutSubviews()`.
reorderControl = view
break
}
}
}
}
Это близко к Первое предложение Senseful , но статья, на которую он ссылается, больше не работает.
Что вы делаете, так это делаете управление переупорядочением и представление содержимого ячейкиразмером с целую ячейку, когда она редактируется.Таким образом, вы можете перетащить из любого места в ячейке, и ваш контент займет все пространство, как если бы ячейка не редактировалась вообще.
Самый важный недостаток этого - то, что вы изменяете системуструктура представления ячейки и ссылка на закрытый класс ( UITableViewCellReorderControl ).Похоже, что он работает должным образом для всех последних версий iOS, но вы должны убедиться, что он остается в силе каждый раз, когда выходит новая ОС.