导航控制器中的 UISearchBar 和两个按钮

Posted

技术标签:

【中文标题】导航控制器中的 UISearchBar 和两个按钮【英文标题】:UISearchBar and Two buttons in the Navigation Controller 【发布时间】:2017-09-23 20:15:12 【问题描述】:

我正在尝试向我的导航控制器添加两个按钮和一个 SearchBar,但对齐不正确。我已经尝试了几乎所有方法,例如更改 SearchBar、UIButton 的大小或更改 Y 定位,但没有奏效。知道如何解决这个问题吗? 我正在使用 ios 11 和 Xcode 9

    searchController = UISearchController(searchResultsController: nil)
    searchController?.searchBar.frame = CGRect(x: 0, y: 0, width: 200, height: 30)
    searchController?.delegate = self
    searchController?.searchResultsUpdater = self

    let refineButton = UIButton.init(type: UIButtonType.custom)
    refineButton.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
    refineButton.setImage(#imageLiteral(resourceName: "settings-button"), for: UIControlState.normal)
    refineButton.widthAnchor.constraint(equalToConstant: 30).isActive = true
    refineButton.heightAnchor.constraint(equalToConstant: 30).isActive = true


    let refineItem = UIBarButtonItem(customView: refineButton)


    navigationItem.leftBarButtonItem = refineItem
    navigationItem.titleView = searchController?.searchBar
    searchController?.searchBar.sizeToFit()

【问题讨论】:

我不确定这是否会有所帮助,但为什么不使用navigationItem.searchController = searchController 而不是navigationItem.titleView = searchController?.searchBar。当然,这只适用于 iOS 11。 @rmaddy 不幸的是,这不起作用,因为搜索控制器将位于按钮下方 【参考方案1】:

请检查:

override func viewWillLayoutSubviews() 
    searchController?.searchBar.frame = CGRect(x: 0, y: 0, width: 300, height: 30)
    searchController?.searchBar.sizeToFit()

【讨论】:

以上是关于导航控制器中的 UISearchBar 和两个按钮的主要内容,如果未能解决你的问题,请参考以下文章

UIsearchBar 取消按钮导致导航栏未隐藏

如何触发 UISearchBar 中的取消按钮?

如何在每个视图上添加 UISearchbar

将 UISearchBar 放在 tableview 上方但不在 tableview 或导航栏中

iPad表格视图上的UISearchBar消失在导航控制器栏下方

如何用 UISearchBar 替换导航栏?