UISearchController.searchBar as tableHeaderView 下拉时导致 UITableView 顶部出现空白 UIView

Posted

技术标签:

【中文标题】UISearchController.searchBar as tableHeaderView 下拉时导致 UITableView 顶部出现空白 UIView【英文标题】:UISearchController.searchBar as tableHeaderView causing a blank UIView on the top of a UITableView when pulling down 【发布时间】:2020-07-02 05:23:00 【问题描述】:

我一直使用UISearchController.searchBar作为UITableViewtableHeaderView,当我拉下tableView时,我的tableView顶部会插入一个奇怪的空白UIView。即使开启了深色模式,这个奇怪的视图总是有浅灰色的背景颜色:

enter image description here

但是当我将一个普通的UIView设置为tableHeaderView时,一切都很好:

enter image description here

在 Debug View Hierarchy 中,UIView 插入到任何单元格之前和 searchBar 之后:

enter image description here

但是当我不拉下 UITableView 时,UIView 将从视图层次结构中消失。

下面是我运行的代码:

class ViewController: UIViewController 
    let tableView = UITableView(frame: .zero, style: .plain)
    let normalHeaderView = UIView()
    let searchController = UISearchController()

    let items: [String] = [
        "Item 1",
        "Item 2",
        "Item 3",
        "Item 4",
        "Item 5",
        "Item 6",
        "Item 7"
    ]

    override func viewDidLoad() 
        super.viewDidLoad()
        
        view.backgroundColor = .green
        
        tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
        tableView.backgroundColor = .blue
        tableView.dataSource = self
        view.addSubview(tableView)
        tableView.snp.makeConstraints  make in
            make.width.height.equalToSuperview()
        
        
        tableView.tableHeaderView = searchController.searchBar
        
//        normalHeaderView.backgroundColor = .red
//        tableView.tableHeaderView = normalHeaderView
//        normalHeaderView.snp.makeConstraints  make in
//            make.width.equalToSuperview()
//            make.height.equalTo(50)
//        
    


extension ViewController: UITableViewDataSource 
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
        return items.count
    
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
        cell.textLabel?.text = items[indexPath.row]
        return cell
    

【问题讨论】:

【参考方案1】:

这似乎是一个奇怪的副作用,我找到的解决方法是创建一个具有所需颜色的视图并将其指定为 tableView 的背景视图

【讨论】:

以上是关于UISearchController.searchBar as tableHeaderView 下拉时导致 UITableView 顶部出现空白 UIView的主要内容,如果未能解决你的问题,请参考以下文章