我为UITableViewCell自定义了尾随滑动操作。它具有图像以及标题和背景色。这样做是这样的:
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
let deleteAction = UIContextualAction(style: .normal, title: ActionTitle.delete) { (deleteAction, view, handler) in
self.deleteAction(indexPath: indexPath)
return handler(true)
}
deleteAction.image = Common.getImageAndTitleForTableRowAction(title: ActionTitle.delete, actionImage: #imageLiteral(resourceName: "delete"))
deleteAction.backgroundColor = Color.orangeColor
let editAction = UIContextualAction(style: .normal, title: ActionTitle.edit) { (editAction, view, handler) in
self.selectedIndexPath = indexPath
self.editLoanRecord()
return handler(true)
}
editAction.image = Common.getImageAndTitleForTableRowAction(title: ActionTitle.edit, actionImage: #imageLiteral(resourceName: "edit"))
editAction.backgroundColor = Color.blueColor
return UISwipeActionsConfiguration(actions: [deleteAction, editAction])
}
现在我需要将backgroundColor
设置为渐变。
检查了很多关于stackoverflow的问题,但无法这样做。任何帮助将不胜感激。
答案 0 :(得分:0)
在许多情况下,Apple的默认实现仅会带您进入,任何进一步的自定义都需要重新实现该功能。
这似乎是其中一种情况,因为上下文操作不是视图,因此您无法像其他视图一样修改它以添加渐变,并且其属性受到限制。
您的选择是:实现自己的滑动单元,使用第三方库(restrictions of generics)或仅使用纯色。
答案 1 :(得分:0)
您可以尝试从渐变图像创建颜色,如下所示:
func linearGradientColor(from colors: [UIColor], locations: [CGFloat], size: CGSize) -> UIColor {
let image = UIGraphicsImageRenderer(bounds: CGRect(x: 0, y: 0, width: size.width, height: size.height)).image { context in
let cgColors = colors.map { $0.cgColor } as CFArray
let colorSpace = CGColorSpaceCreateDeviceRGB()
let gradient = CGGradient(
colorsSpace: colorSpace,
colors: cgColors,
locations: locations
)!
context.cgContext.drawLinearGradient(
gradient,
start: CGPoint(x: 0, y: 0),
end: CGPoint(x: size.width, y:0),
options:[]
)
}
return UIColor(patternImage: image)
}
...
deleteAction.backgroundColor = linearGradientColor(
from: [.red, .blue],
locations: [0, 1],
size: CGSize(width: 100, height: 44)
)
但是此代码有一些限制。您无法猜测操作视图的大小。因此,根据您的需要,您可以重复颜色,拉伸颜色或使用大图像。使用第三方库也是一个不错的选择。