UITableView - 自定义 UITableViewCell 中的自定义 selectedBackgroundView 选择时隐藏单元格分隔符

Posted

技术标签:

【中文标题】UITableView - 自定义 UITableViewCell 中的自定义 selectedBackgroundView 选择时隐藏单元格分隔符【英文标题】:UITableView - Custom selectedBackgroundView in custom UITableViewCell hides cell separator when selected 【发布时间】:2017-07-07 19:54:39 【问题描述】:

我有一个UITableView,它呈现自定义类DrawerTableCell 的单元格,它是这样声明的:

class DrawerTableCell: UITableViewCell 

    @IBInspectable var selectionColor: UIColor = .gray 
        didSet 
            configureSelectedBackgroundView()
        
    

    func configureSelectedBackgroundView() 
        let view = UIView()
        view.backgroundColor = selectionColor
        selectedBackgroundView = view
    

创建此UITableViewCell 子类是为了能够为单元格指定选定的背景颜色。

在我的视图控制器中我设置:

tableView.separatorColor = .white

我这样配置单元格:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    let cell = tableView.dequeueReusableCell(withIdentifier: "drawerCell") as! DrawerTableCell
    cell.selectionColor = UIColor.blue
    return cell

结果是当没有选择单元格时,所有的分隔符都正确显示。当我选择一个单元格时,显示背景颜色,但分隔符仅隐藏在所选单元格中。

关于如何将分隔线保留在所选单元格中的任何想法?

谢谢。

【问题讨论】:

2020 年在这里寻找完整的解决方案:***.com/a/64582629/171933 【参考方案1】:

根据Apple的文档,UITableViewCell仅在选择单元格时将此属性的值添加为子视图。如果它不是 nil 或在所有其他视图之后,它会将选定的背景视图作为子视图添加到背景视图 (backgroundView) 的正上方。

因此,据此,我认为您的分隔符已隐藏,因为它位于您的新视图下方。尝试将您的 selectionColor 设置为 .clear ,看看会发生什么。如果这不起作用,您也可以尝试完全删除表格视图上的分隔符,然后在每个单元格的底部添加一条 0.5px 的线。

【讨论】:

以上是关于UITableView - 自定义 UITableViewCell 中的自定义 selectedBackgroundView 选择时隐藏单元格分隔符的主要内容,如果未能解决你的问题,请参考以下文章

自定义 UIView 中的 UItable

自行调整特定 UITableView 单元的大小

如何在已经是 NIB 的 UICollectionViewCell 中加载带有自定义单元格的 UITable

嵌入在 UIView 中的动态 UITableView - 计算高度

UITableView 部分标题内的下拉 UIView

在 UITableView 中滚动时移除 UIView