答案 0 :(得分:1)
您要查找的是节标题。您可以通过实现UITableViewDataSource
方法来轻松配置自己的自定义视图
例如:
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let headerView = UIView()
// configure view, note the method gives you the section to help this process
return headerView
}
您可能还想实现此功能
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 50 // or whatever it is
}
请记住,默认情况下标头是粘性的
过去,我可以很容易地做到这一点:
let dummyViewHeight = CGFloat(49) // height of header (set in storyboard)
self.tableView.tableHeaderView = UIView(frame: CGRect(x: 0, y: 0, width: self.tableView.bounds.size.width, height: dummyViewHeight))
self.tableView.contentInset = UIEdgeInsets(top: -dummyViewHeight, left: 0, bottom: 0, right: 0)
基本上只是使表头“粘”在表的顶部。 (除非您确实希望它悬停在顶部的部分上)
鉴于OP认为这是“不令人满意的”,当我说唯一的其他合理选择(如果您不希望使用节的页眉或页脚视图)时,我想99%的自信就可以做出一个新的选择UITableViewCell
子类。然后,该新子类将出现在每个部分的顶部。
因此,在cellForIndexPath:
方法中,您需要检查indexPath.row == 0
是否存在以及是否将具有不同标识符的单元出队。这样,标头就变成了以不同方式构建的单元。
如果您以编程方式进行操作,请确保注册该单元格(tableView.register(MyNewHeaderCellSubclass.self, forCellReuseIdentifier: "MyNewHeaderCellSubclass")
),否则,请转到情节提要上的表格视图,并为两种类型的动态单元格类别切换选项。
节标题正是此用例的用途。我无法想到任何其他解决方案,而不仅仅是完全放弃UITableView
,我认为这是一个很大的错误。否则,祝您好运。