我正试图绕过UITableViewCell删除按钮的角落。我还想使它与我的单元格的容器视图的高度相同。
我已经四处寻找,但我能找到的是如何更改删除按钮内的图像。
任何帮助都会很棒!
答案 0 :(得分:0)
如果您正在谈论滑动删除UITableViewRowAction,则无法执行此操作。那些行动在外观方面令人惊讶地不灵活。您需要通过基于手势识别器的解决方案实现自己的解决方案。现在,这样做有足够的复杂性,如果你真的想要这个功能,我建议使用像SwipeCellKit这样的第三方依赖。如果是我,我会将这种外观调整归类为不值得投入的时间(或者值得添加依赖项)并采用不同的路线。
答案 1 :(得分:0)
对于希望对标准矩形滑动操作按钮有不同解决方案的任何人来说,这可能会有所帮助。
斯威夫特 5
使用白色垃圾桶图像添加删除操作,然后使用扩展程序添加大约两倍于原始图像大小的背景圆圈。
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
var actions = [UIContextualAction]()
let delete = UIContextualAction(style: .normal, title: nil) { [weak self] (contextualAction, view, completion) in
// Delete something
completion(true)
}
let largeConfig = UIImage.SymbolConfiguration(pointSize: 17.0, weight: .bold, scale: .large)
delete.image = UIImage(systemName: "trash", withConfiguration: largeConfig)?.withTintColor(.white, renderingMode: .alwaysTemplate).addBackgroundCircle(.systemRed)
delete.backgroundColor = .systemBackground
delete.title = "Delete"
actions.append(delete)
let config = UISwipeActionsConfiguration(actions: actions)
config.performsFirstActionWithFullSwipe = false
return config
}
用于向 UIImage 添加任何颜色的背景圆圈的扩展。
extension UIImage {
func addBackgroundCircle(_ color: UIColor?) -> UIImage? {
let circleDiameter = max(size.width * 2, size.height * 2)
let circleRadius = circleDiameter * 0.5
let circleSize = CGSize(width: circleDiameter, height: circleDiameter)
let circleFrame = CGRect(x: 0, y: 0, width: circleSize.width, height: circleSize.height)
let imageFrame = CGRect(x: circleRadius - (size.width * 0.5), y: circleRadius - (size.height * 0.5), width: size.width, height: size.height)
let view = UIView(frame: circleFrame)
view.backgroundColor = color ?? .systemRed
view.layer.cornerRadius = circleDiameter * 0.5
UIGraphicsBeginImageContextWithOptions(circleSize, false, UIScreen.main.scale)
let renderer = UIGraphicsImageRenderer(size: circleSize)
let circleImage = renderer.image { ctx in
view.drawHierarchy(in: circleFrame, afterScreenUpdates: true)
}
circleImage.draw(in: circleFrame, blendMode: .normal, alpha: 1.0)
draw(in: imageFrame, blendMode: .normal, alpha: 1.0)
let image: UIImage? = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
}