如何增大UITableView中EditingStyle按钮/滑动删除按钮的宽度?
调整UITableView滑动删除/EditingStyle按钮宽度的方法
一、iOS 11+ 自定义滑动操作(推荐,无审核风险)
从iOS 11开始,苹果提供了更灵活的滑动操作配置API,可直接自定义滑动按钮宽度:
- 在
UITableViewDelegate中实现trailingSwipeActionsConfigurationForRowAt方法,创建UIContextualAction时通过preferredWidth属性设置目标宽度:
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? { let deleteAction = UIContextualAction(style: .destructive, title: "删除") { [weak self] (action, view, completionHandler) in // 执行删除逻辑 completionHandler(true) } // 自定义按钮宽度,系统默认约80,这里设为120 deleteAction.preferredWidth = 120 let configuration = UISwipeActionsConfiguration(actions: [deleteAction]) return configuration }
Objective-C版本:
- (UISwipeActionsConfiguration *)tableView:(UITableView *)tableView trailingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath { UIContextualAction *deleteAction = [UIContextualAction contextualActionWithStyle:UIContextualActionStyleDestructive title:@"删除" handler:^(UIContextualAction * _Nonnull action, __kindof UIView * _Nonnull view, void (^ _Nonnull completionHandler)(BOOL)) { // 执行删除逻辑 completionHandler(YES); }]; deleteAction.preferredWidth = 120; UISwipeActionsConfiguration *config = [UISwipeActionsConfiguration configurationWithActions:@[deleteAction]]; return config; }
二、iOS 11之前的版本(自定义滑动按钮)
iOS11之前需用editActionsForRowAt方法自定义滑动按钮,通过绑定自定义视图实现宽度调整:
func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? { let deleteAction = UITableViewRowAction(style: .destructive, title: "") { [weak self] (action, indexPath) in // 执行删除逻辑 } // 创建自定义宽度的按钮视图 let customBtnView = UIView(frame: CGRect(x: 0, y: 0, width: 120, height: tableView.rowHeight)) customBtnView.backgroundColor = .red let label = UILabel(frame: customBtnView.bounds) label.text = "删除" label.textColor = .white label.textAlignment = .center customBtnView.addSubview(label) // 将自定义视图绑定到滑动按钮 deleteAction.setValue(customBtnView, forKey: "view") return [deleteAction] }
三、修改系统默认滑动按钮宽度(不推荐,有审核风险)
若不想自定义按钮,可通过遍历cell子视图找到系统默认删除按钮调整frame,但此方法依赖系统私有视图结构,iOS版本更新可能失效,且存在App Store审核被拒风险:
override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) { // 遍历cell子视图定位系统删除按钮 for subview in cell.subviews { if subview.classForCoder.description() == "UITableViewCellDeleteConfirmationView" { var btnFrame = subview.frame btnFrame.size.width = 120 // 修改宽度 subview.frame = btnFrame // 调整按钮内部文字标签位置,避免截断 for innerView in subview.subviews { if let label = innerView as? UILabel { label.frame = subview.bounds label.textAlignment = .center } } } } }
注意事项
- 优先使用官方API实现自定义滑动操作,避免依赖系统私有视图,保障兼容性与审核安全。
- 设置宽度时需考虑按钮文字长度,避免内容被截断。
内容的提问来源于stack exchange,提问作者Gurpreet Singh Gulati
相关产品推荐
相关产品推荐

