TableView Header 中的程序化 UIView

Posted

技术标签:

【中文标题】TableView Header 中的程序化 UIView【英文标题】:Programmatic UIView inside TableView Header 【发布时间】:2018-11-16 08:39:07 【问题描述】:

我以编程方式将 UIView 放入我的 TableView Header 中。

但是,标题视图被导航控制器栏挡住了,高度不会变大。

这是我的代码:

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

什么是有效的:

    TableView 加载。 出现一个“蓝色”标题,看起来大约 10 像素大并且卡在 TableView 的顶部 此“蓝色”标题已被导航控制器栏阻止。

什么不起作用:

    “蓝色”标题没有改变其高度。

    “蓝色”标题不会降低。

【问题讨论】:

注意:这不是表头,而是节。改用 tableView.tableHeaderView 属性,然后设置框架将起作用 @KK7 你认为你可以用一些代码提供答案吗?抱歉,我只是新手。 【参考方案1】:

应该是这样的!

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

【讨论】:

【参考方案2】:

您可以通过两种方式实现此目的:

    使用viewForHeaderInSection dataSource 和heightForHeaderInSection 委托方法。

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

    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 在您的情况下是多余的,因此您应该将其删除。

【讨论】:

以上是关于TableView Header 中的程序化 UIView的主要内容,如果未能解决你的问题,请参考以下文章

如何做大tableView header?

iOS UITableView ExpandableHeader(可形变的Header)

tableView Header 中的 iOS 11 搜索栏在焦点上跳转到屏幕顶部

UIScrollView 内的 UITableView 或使用 TableView Header

NSFetchedResultsController - TableView 中的 UI 更新不完整

ios tableView的header高度不对