Swift:如何修改UITableView侧滑删除按钮的尺寸?
如何调整UITableView侧滑删除按钮的尺寸
当然可以调整!默认的侧滑删除按钮会填满cell的整个侧边区域,这就是它会延伸到你自定义边框内的原因。下面给你两种实用的解决方法,结合你的代码来实现:
方法一:自定义UIContextualAction的背景视图
你可以给UIContextualAction设置一个自定义的backgroundView,通过这个视图来控制按钮的尺寸和位置,避免超出cell的边框:
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? { // 创建自定义背景视图,设置你想要的尺寸和样式 let customBackgroundView = UIView() customBackgroundView.backgroundColor = .red // 比如让按钮右边留出10pt,上下各留5pt,宽度设为80pt(根据你的需求调整) customBackgroundView.frame = CGRect(x: tableView.bounds.width - 90, y: 5, width: 80, height: tableView.rowHeight - 10) customBackgroundView.layer.cornerRadius = 8 // 可选,添加圆角 // 添加删除文字到背景视图 let label = UILabel(frame: customBackgroundView.bounds) label.text = "Delete" label.textColor = .white label.textAlignment = .center customBackgroundView.addSubview(label) let deleteAction = UIContextualAction(style: .destructive, title: nil) { (action, view, handler) in self.reminders.remove(at: indexPath.row) tableView.deleteRows(at: [indexPath], with: .automatic) handler(true) } // 将自定义视图设为action的背景 deleteAction.backgroundView = customBackgroundView let configuration = UISwipeActionsConfiguration(actions: [deleteAction]) return configuration }
注意这里把action的title设为nil,因为我们已经在自定义视图里添加了文字,避免重复显示。
方法二:调整Cell的布局边距(适合简单场景)
如果你的cell边框是加在contentView上的,你可以调整cell的layoutMargins,让侧滑按钮自动避开边框区域:
在你的自定义UITableViewCell的layoutSubviews方法里添加:
override func layoutSubviews() { super.layoutSubviews() // 调整layoutMargins,让侧滑按钮和contentView的边框保持距离 layoutMargins = UIEdgeInsets(top: 5, left: 0, bottom: 5, right: 10) }
这种方法更简单,但灵活性不如第一种,适合只需要调整边距的场景。
额外提示
如果你用的是iOS 15+,还可以尝试UIContextualAction的image属性配合preferredStyle,不过自定义背景视图的方式兼容性和可控性更强。
内容的提问来源于stack exchange,提问作者user3628240
相关产品推荐
相关产品推荐

