在UITableView Swift中的所有部分上方添加UIView

时间:2018-07-12 20:42:55

标签: ios swift uitableview uiview

我不是在谈论我要在每个部分上方放置uiview的部分

这是布局

enter image description here

这里Menu和LeftOver是uiView 叙述者和新手是章节

1 个答案:

答案 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,我认为这是一个很大的错误。否则,祝您好运。