UITableViewCell中删除按钮的四舍五入

时间:2017-09-12 18:59:44

标签: ios uitableview

我正试图绕过UITableViewCell删除按钮的角落。我还想使它与我的单元格的容器视图的高度相同。

我已经四处寻找,但我能找到的是如何更改删除按钮内的图像。

任何帮助都会很棒!

2 个答案:

答案 0 :(得分:0)

如果您正在谈论滑动删除UITableViewRowAction,则无法执行此操作。那些行动在外观方面令人惊讶地不灵活。您需要通过基于手势识别器的解决方案实现自己的解决方案。现在,这样做有足够的复杂性,如果你真的想要这个功能,我建议使用像SwipeCellKit这样的第三方依赖。如果是我,我会将这种外观调整归类为不值得投入的时间(或者值得添加依赖项)并采用不同的路线。

答案 1 :(得分:0)

enter image description here

对于希望对标准矩形滑动操作按钮有不同解决方案的任何人来说,这可能会有所帮助。

斯威夫特 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
    }
}