如何删除分组表视图中标题和第一行之间的分隔符
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
提供的默认分隔符。并放置一个UILabel
或UIView
并将其背景颜色设置为浅灰色并设置其高度=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 列表中最后一行和倒数第二行之间的分隔符?
如何从 ExpandableListView 的子项中删除分隔符?