如何在UITableView部分之间添加分隔符?

时间:2018-03-15 12:12:29

标签: ios swift uitableview cocoa-touch uikit

我实现了一个tableview,它有3个部分(部分计数保持静态),每个部分包含几行。

行为1:仅将章节标题添加到第三部分。

我是如何实现的:

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    if section == 2 {
       //create and return header view
    }
    return UIView(frame: CGRect(x: 0, y:0, width: tableView.width, height: UIScreen.main.scale))
}

行为2: TableViewCells不应该有分隔符。但是,部分应该用细线分开。 (类似于tableviewcell分隔符)

我尝试了什么:

  • 添加一个像素高度,tableView宽度UIView,并设置所有必需的属性(颜色等),并将其作为子视图添加到节标题视图中
  • 将带有CGPoint(0,1)的投影添加到节标题视图

他们都没有成功。

我是如何实现这一目标的:

  1. 查找每个部分的最后一个单元格,
  2. 创建一个高度为1px,桌面视图宽度的UIView,并将其作为子视图添加到最后一个单元格
  3. 虽然这似乎有效。我觉得,必须有一个更好的方法来做到这一点,而不是在每个部分的最后一个tableView单元格的底部添加一行。有谁知道实现这种行为的更好方法?

4 个答案:

答案 0 :(得分:1)

使用UITableViewDelegate的{​​{1}}方法,并根据需要返回明智的高度

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        if section == 2 {
            return 1 // return height as per your requirement
        }
        return 0 // return height as per your requirement
    }

答案 1 :(得分:1)

这个简单的解决方法 只需在tableview中添加footer view,将footer view的高度设置为一个特定的高度。

斯威夫特:

 public func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
    let view = UIView()
    view.backgroundColor = UIColor.grey
    return view
}

public func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return 10
}

答案 2 :(得分:0)

这应该适用于在第3部分添加“部分分隔线”和仅头部视图

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    // if it's the 3rd section, return a view with desired content for the section header
    if section == 2 {
        let v = UIView(frame: CGRect(x: 0, y:0, width: tableView.frame.width, height: 30))
        v.backgroundColor = .yellow
        let label = UILabel(frame: CGRect(x: 8.0, y: 4.0, width: v.bounds.size.width - 16.0, height: v.bounds.size.height - 8.0))
        label.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        label.text = "Header for Third Section"
        v.addSubview(label)
        return v
    }
    // not the 3rd section, so don't return a view
    return nil
}

override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    // if it's the 3rd section
    if section == 2 {
        return 30
    }
    return 0
}

override func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
    // UIView with darkGray background for section-separators as Section Footer
    let v = UIView(frame: CGRect(x: 0, y:0, width: tableView.frame.width, height: 1))
    v.backgroundColor = .darkGray
    return v
}

override func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    // Section Footer height
    return 1.0
}

答案 3 :(得分:-1)

将表格视图的样式设置为分组enter image description here