如何删除分组表视图中标题和第一行之间的分隔符

Posted

技术标签:

【中文标题】如何删除分组表视图中标题和第一行之间的分隔符【英文标题】:How to remove the separator between the header and the first row in a grouped tableView 【发布时间】:2018-10-11 14:55:08 【问题描述】:

我正在创建一个静态 tableView。我的目标是拥有一个显示 3 行(获得支持、发送反馈、参与条款)和页眉 + 页脚的 tableView 的单一视图。

现在,除了我似乎无法摆脱的两个额外分隔符(一个在页眉和第一个单元格之间,另一个在最后一个单元格和页脚之间)之外,一切正常。

这是我的代码:

final class viewController: UITableViewController 

    private let headerContainer = UIView()
    private let footerContainer = UIView()

    private let tableData = ["Get Support", "Send Feedback", "Participation Terms"]

    override func viewDidLoad() 
        super.viewDidLoad()

        setupHeaderAndFooter()
        setupTableView()
    

    func setupHeaderAndFooter() 
        /* setup code here (not relevant to this question) */

    func setupTableView() 
        // reinitializing tableView so that we can change its style to grouped
       tableView = UITableView(frame: CGRect.zero, style: .grouped)
       tableView.delegate = self
       tableView.separatorStyle = .singleLine
    

    //MARK: UITableView Methods

    override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? 
        return headerContainer
    

    override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat 
         return 150
    

    override func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? 
        return footerContainer
    

    override func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat 
        return 200
    

    override func numberOfSections(in tableView: UITableView) -> Int 
        return 1
    

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
        return tableData.count
    

    override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat 
        return 70
    

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
        let cell = UITableViewCell(style: .subtitle, reuseIdentifier: "cell")
        cell.textLabel!.text = tableData[indexPath.row]
        return cell
    

【问题讨论】:

你能贴一张你得到的结果的照片吗?也许你期待的结果? 好的,给我一分钟 我刚刚用图片更新了帖子 你得到了下面的答案:) 【参考方案1】:

实现此目的的一种方法是不要使用UITableView 提供的默认分隔符。并放置一个UILabelUIView 并将其背景颜色设置为浅灰色并设置其高度=1(根据您的要求)、宽度(完整的表格视图宽度或根据您的要求)和所有内容的底部位置在单元格、页眉或页脚内。

【讨论】:

嗨 Dhaval,感谢您的回答。这种方法的问题是我必须为自定义 tableView 单元格创建另一个类。我打算保留UITableViewController 类提供的默认单元格。还有其他解决方法吗?【参考方案2】:

好的,给你。

简单的技巧实际上是单行且不言自明:

self.tableView.separatorColor = self.tableView.backgroundColor

之后:

我希望这会有所帮助!

【讨论】:

感谢格伦的回答。我可以看到你在那里做什么,但我可能应该提到我为应用程序设置了背景颜色。该颜色是白色的,所以如果我将分隔符颜色设置为 tableView 的背景颜色,我最终会导致所有分隔符根本不显示!我最初省略了那部分代码,因为我认为它无关紧要 你知道分隔符颜色等于tableView的背景颜色吗?因此,这意味着无论您为 tableView 设置的颜色如何,您都会得到相同的结果。所以也可以使其颜色清晰。 self.tableView.separatorColor = .clear这应该可以解决您的问题:) 哦,是的,但这样我想我会摆脱所有的分隔符,而我只想摆脱页眉和页脚中的分隔符 在这种情况下,请将 tableView 的 separatorStyle 替换为 none,如下所示:self.tableView.separatorStyle = .none。另外,不要忘记选择此问题的答案来关闭它。 我觉得有误会。我确实想要单元格之间的分隔符。我只是不想要页眉和第一个单元格之间的分隔符,以及最后一个单元格和页脚之间的分隔符。我的问题是关于专门摆脱这两个分隔符,同时保留所有其他分隔符。到目前为止,没有一个答案可以解决这个问题,但我会在问题解决后立即选择一个!【参考方案3】:

您必须在标题视图中将clipsToBounds 设置为true

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? 
    let header = //Get your header here
    header.clipsToBounds = true
    return header

之前:

之后:

【讨论】:

以上是关于如何删除分组表视图中标题和第一行之间的分隔符的主要内容,如果未能解决你的问题,请参考以下文章

您如何显示分组表部分的行分隔符?

如何着色/删除 SwiftUI 列表中最后一行和倒数第二行之间的分隔符?

从分组的 UItableview 中删除分隔符

如何从 ExpandableListView 的子项中删除分隔符?

分组 UITableView 中第一个和第二个单元格之间的 1 个像素间隙

如何删除 UITableView 单元格之间的分隔