【问题标题】:Not able to add UISearchBar in HeaderView(tableview's header view)?无法在 HeaderView(tableview 的标题视图)中添加 UISearchBar?
【发布时间】:2021-05-30 22:22:49
【问题描述】:

无法在 tableView 部分标题中看到 searchBar 一切都以编程方式完成,没有使用故事板


import UIKit

class ConversationsViewController: UITableViewController {
    
    
    
    let searchBar:UISearchBar = {
        let bar = UISearchBar()
        bar.placeholder = "search conversations"
        bar.translatesAutoresizingMaskIntoConstraints = false
        return bar
    }()
    let headerView:UIView = {
        let hView = UIView()
//        hView.backgroundColor = .red
        hView.translatesAutoresizingMaskIntoConstraints = false
        return hView
        
    }()
    //    we want custom cell and header view
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // Do any additional setup after loading the view.
    }
    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()

    }
//    override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
//        return "section \(section)"
//    }
    override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        headerView.addSubview(searchBar)
        searchBar.centerXAnchor.constraint(equalTo: headerView.centerXAnchor).isActive = true
        searchBar.centerYAnchor.constraint(equalTo: headerView.centerYAnchor).isActive = true
        searchBar.heightAnchor.constraint(equalToConstant: 100).isActive = true
        searchBar.widthAnchor.constraint(equalToConstant: 40).isActive = true
        return headerView
    }
    override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return 70
    }
}

这是输出照片

我尝试了不同的方法,但我找到了这种在 tableView 中添加 headerView 的方法,现在我不知道如何在 headerView 中添加该搜索栏,我在上面尝试了但它不起作用,请帮助谢谢

【问题讨论】:

    标签: ios swift tableview uitabbarcontroller xcode11


    【解决方案1】:

    几件事...

    节标题的视图应该.translatesAutoresizingMaskIntoConstraints 设置为false。将其保留为默认的true

    不要给UISearchBar 一个高度限制——让它使用它的固有高度。

    我们确实需要给搜索栏一个宽度限制。如果您希望它适合表格的宽度,请使用:

    searchBar.widthAnchor.constraint(equalTo: headerView.widthAnchor, constant: 0.0).isActive = true
    

    如果您希望它只是部分宽度,请将该行的 constant 设为负值,或使用乘数:

    // this will make the search bar 90% of the width of the table
    searchBar.widthAnchor.constraint(equalTo: headerView.widthAnchor, multiplier: 0.9).isActive = true
    

    这是你的类进行了这些修改:

    class ConversationsViewController: UITableViewController {
        
        let searchBar:UISearchBar = {
            let bar = UISearchBar()
            bar.placeholder = "search conversations"
            bar.translatesAutoresizingMaskIntoConstraints = false
            return bar
        }()
    
        let headerView:UIView = {
            let hView = UIView()
    
            // give it a background color so we can easily see
            //  if it is laying out correctly
            hView.backgroundColor = .red
    
            // section header view should leave this at the default TRUE
            //hView.translatesAutoresizingMaskIntoConstraints = false
    
            return hView
        }()
    
        override func viewDidLoad() {
            super.viewDidLoad()
        }
    
        override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
            // add the searchBar
            headerView.addSubview(searchBar)
            
            // center it horizontally and vertically
            searchBar.centerXAnchor.constraint(equalTo: headerView.centerXAnchor).isActive = true
            searchBar.centerYAnchor.constraint(equalTo: headerView.centerYAnchor).isActive = true
            
            // don't set height constraint - use UISearchBar intrinsic height
            //searchBar.heightAnchor.constraint(equalToConstant: 100).isActive = true
            
            // constrain width equal to headerView width
            //  we can adjust the constant if we don't want it to span the entire width of the table
            //  by using a negative value for the constant, or using a mulitplier to get a percent of the width
            searchBar.widthAnchor.constraint(equalTo: headerView.widthAnchor, constant: 0.0).isActive = true
            
            return headerView
        }
        
        override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
            return 70
        }
        
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-23
      • 1970-01-01
      • 1970-01-01
      • 2013-01-24
      • 2016-09-10
      • 2023-03-10
      • 1970-01-01
      相关资源
      最近更新 更多