TableView标头中的程序化UIView

时间:2018-11-16 08:39:07

标签: swift uitableview tableview

我正在以编程方式将UIView放在TableView标头中。

但是,标题视图已被导航控制器栏阻止,并且高度不会变大。

这是我的代码:

let headerView = UIView()

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    headerView.backgroundColor = UIColor(red: 0.000, green: 0.749, blue: 1.000, alpha: 1.00)
    headerView.frame = CGRect(x: 0, y: 100, width: view.frame.width, height: 200)
    return headerView
}

工作原理:

  1. TableView加载。
  2. 出现一个“蓝色”标题,看起来大约10像素大,并停留在TableView的顶部
  3. “蓝色”标题被导航控制器栏阻止。

什么不起作用:

  1. “蓝色”标头未更改其高度。

  2. “蓝色”标头不会再降低了。

2 个答案:

答案 0 :(得分:0)

应该是这样!

var headerView = UIView()
headerView.backgroundColor = UIColor(red: 0.000, green: 0.749, blue: 1.000, alpha: 1.00)
headerView.frame = CGRect(x: 0, y: 100, width: view.frame.width, height: 200)
self.tableView.tableHeaderView = headerView // Here goes the UIView for the header

答案 1 :(得分:0)

您可以通过两种方式实现这一目标:

  1. 使用viewForHeaderInSection数据源和heightForHeaderInSection委托方法。

  2. 但是,如果您要使用一个标题,并且不需要“粘性”部分标题功能,则建议使用:

    let tableHeaderView = UIView()
    override func viewDidLoad() {
        super.viewDidLoad()        
        tableHeaderView.frame = CGRect(x: 0, y: 0, width: view.frame.width, height: 200)
        tableView.tableHeaderView = tableHeaderView
    }
    

注意:如果您要使用2种方法,则viewForHeaderInSection在您的情况下是多余的,因此应将其删除。