快速向右滑动时删除tableview灰色背景颜色

Posted

技术标签:

【中文标题】快速向右滑动时删除tableview灰色背景颜色【英文标题】:Remove the tableview gray background color while swipe to right in swift 【发布时间】:2018-08-02 12:27:31 【问题描述】:

我有一个 tableview 动态原型自定义 tableview 单元格。 我的 tableview 单元格颜色是白色的,tableview 的背景也是白色的。 我想为我的 tableviewcell 向右滑动删除功能,并使用自定义 tableviewrowaction 我已经在我的应用程序中使用自定义 tableviewrowaction 实现了相同的功能,它工作正常,但唯一的问题是当我向右滑动单元格反弹并且单元格后面有灰色背景颜色时。我已经删除了背景视图,更改了单元格和表格视图的颜色,但是当我滑动单元格时,我仍然可以看到背景颜色为灰色。 以下是为显示自定义 tableview 删除行操作而编写的代码

public func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? 

    let deleteAction = UITableViewRowAction(style: .default, title: "")  (action, indexPath) in
        let cell =  self.tableview.cellForRow(at: indexPath) as? CardInfoSwipeCell
        cell?.deleteAction(action)

    

    deleteAction.setIcon(iconImage: UIImage(named: "delete")!, backColor: UIColor.white, cellHeight: 100.0, iconSizePercentage: 0.79)

    return [deleteAction]

以下是在 tableviewrowaction 上设置图像的代码

extension UITableViewRowAction 

    func setIcon(iconImage: UIImage, backColor: UIColor, cellHeight: CGFloat, iconSizePercentage: CGFloat)
    
        let iconHeight = cellHeight * iconSizePercentage
        let margin = (cellHeight - iconHeight) / 2 as CGFloat

        UIGraphicsBeginImageContextWithOptions(CGSize(width: cellHeight, height: cellHeight), false, 0)
        let context = UIGraphicsGetCurrentContext()

        backColor.setFill()
        context!.fill(CGRect(x:0, y:0, width:cellHeight, height:cellHeight))

        iconImage.draw(in: CGRect(x: 0, y: margin, width: iconHeight - 10, height: iconHeight - 4))

        let actionImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();

        self.backgroundColor = UIColor.init(patternImage: actionImage!)
    

请找到所附的屏幕截图,其中灰色背景显示在后面

有什么办法可以禁用tableview的拖拽反弹,让它不应该被拖到某个点之外。

【问题讨论】:

您是否尝试将单元格背景颜色更改为清除? @ivarun 是的,我已经尝试过了,但仍然存在同样的问题 【参考方案1】:

我尝试将背景颜色设置为.clear,但这不起作用。这种解决方法可以完成工作。

action.backgroundColor = UIColor(white: 1, alpha: 0.001)

【讨论】:

【参考方案2】:

你可以使用这个库https://github.com/SwipeCellKit/SwipeCellKit 允许你在UITableViewRowAction 上放置图标

[TableView] 不再支持将图案颜色设置为 UITableViewRowAction 的 backgroundColor。

【讨论】:

我已经按照这个库中提到的相同方式设计了我的 tableviewrowaction,但问题是我想要带有圆形边缘的 tableviewrowaction,所以我已经将整个图像添加到带有圆形边缘的行动作中【参考方案3】:

要禁用tableview拖动反弹可以使用以下方法-

@available(ios 11.0, *)
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? 

    let delete = UIContextualAction(style: .destructive, title: "Delete")  (action, sourceView, completionHandler) in

       // Code to perform delete action
        completionHandler(true);
    

    let swipeAction = UISwipeActionsConfiguration(actions:[delete])
    swipeAction.performsFirstActionWithFullSwipe = false // This is the line which disables full swipe
    return swipeAction


【讨论】:

也尝试过此解决方案,但这不适用于自定义 tableview 行操作,因为当我拖动单元格时,我可以看到带有自定义图像的按钮数量

以上是关于快速向右滑动时删除tableview灰色背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

iOS UISearchDisplayController 防止 tableview 改变背景颜色(背景保持灰色)

更改tableView中偶数单元格的背景颜色

Swift - 在 tableView.selectRow 中更改背景颜色

如何让 UIPageControl 的背景颜色随着页面滑动而改变?

在 iPad 上编辑时编辑 tableview 缺少背景颜色

c4d中怎么把背景颜色灰色调成黑色或者白色?