如何为UITableView的Trailing Swipe Actions配置白色背景及深灰色图标?
解决UITableView Trailing Swipe Actions图标颜色问题
我太懂你这种糟心的感觉了——UIContextualAction默认会把图标强行渲染成白色,刚好背景也是白色的话,图标直接隐身,而且找了半天确实没看到直接的tintColor属性。别慌,这几个方案肯定能帮你搞定:
方法1:修改图片渲染模式(最常用)
系统默认会把图标转成模板模式(自动适配白色),我们只需要把图片的渲染模式改成alwaysOriginal,就能保留图片本身的颜色,不会被系统强制修改。
示例代码:
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? { // 创建删除操作 let deleteAction = UIContextualAction(style: .destructive, title: "删除") { (action, view, completionHandler) in // 这里写你的删除逻辑 completionHandler(true) } // 加载图片并修改渲染模式 if let deleteImage = UIImage(named: "delete-icon")?.withRenderingMode(.alwaysOriginal) { deleteAction.image = deleteImage } // 按需设置背景色,不设置也可以保留图片原颜色 deleteAction.backgroundColor = .systemRed let configuration = UISwipeActionsConfiguration(actions: [deleteAction]) return configuration }
方法2:用foregroundColor配合模板图标
如果你的图标是单色模板图(只有透明度信息),可以直接用UIContextualAction的foregroundColor属性,一次性设置图标和文字的颜色:
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? { let editAction = UIContextualAction(style: .normal, title: "编辑") { (action, view, completionHandler) in // 这里写你的编辑逻辑 completionHandler(true) } // 加载模板图标(默认就是alwaysTemplate模式) editAction.image = UIImage(named: "edit-icon") // 设置前景色,图标和文字都会同步变成这个颜色 editAction.foregroundColor = .darkGray editAction.backgroundColor = .systemGray5 let configuration = UISwipeActionsConfiguration(actions: [editAction]) return configuration }
方法3:自定义操作视图(iOS 16+)
如果上面两种都满足不了你的个性化需求,iOS 16及以上可以直接自定义操作的视图,比如用UIButton完全控制图标和颜色:
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? { let customAction = UIContextualAction(style: .normal, title: nil) { (action, view, completionHandler) in // 这里写你的自定义操作逻辑 completionHandler(true) } // 创建自定义按钮 let customButton = UIButton(type: .system) customButton.setImage(UIImage(named: "custom-icon"), for: .normal) customButton.tintColor = .blue customButton.backgroundColor = .lightGray // 将按钮设为操作的视图 customAction.backgroundColor = .clear customAction.actionView = customButton let configuration = UISwipeActionsConfiguration(actions: [customAction]) return configuration }
注意:actionView是iOS 16才新增的API,如果项目需要兼容更低版本,优先用前两种方案哦。
内容的提问来源于stack exchange,提问作者Khushal Dugar
相关产品推荐
相关产品推荐

