iOS13 中的 SearchController

Posted

技术标签:

【中文标题】iOS13 中的 SearchController【英文标题】:SearchController in iOS13 【发布时间】:2019-10-01 05:55:29 【问题描述】:

我在 navigationItem 中添加了 searchController 。在 ios12 中,它可以正常显示,但在 iOS 13 中它没有显示。在调试视图层次结构时,它显示已添加搜索栏,但其高度已设置为零。无法追踪正确的解决方案。

代码:

func setupSearchController() 

    searchController = UISearchController(searchResultsController: nil)
    searchController.searchResultsUpdater = self as UISearchResultsUpdating
    searchController.searchBar.placeholder = "Search here..."
    searchController.searchBar.delegate = self as UISearchBarDelegate
    searchController.searchBar.tintColor = .white
    searchController.searchBar.barTintColor = .white
    searchController.hidesNavigationBarDuringPresentation = false
    searchController.obscuresBackgroundDuringPresentation = false
    searchController.searchBar.showsCancelButton = true 

    if let textfield = searchController.searchBar.value(forKey: "searchField") as? UITextField 

        textfield.textColor = UIColor.blue

        if let backgroundview = textfield.subviews.first 

            // Background color
            backgroundview.backgroundColor = UIColor.white

            // Rounded corner
            backgroundview.layer.cornerRadius = 10;
            backgroundview.clipsToBounds = true;
        
    

    if #available(iOS 11.0, *) 
        self.navigationItem.searchController = searchController
     else 
        self.tblView.tableHeaderView = searchController.searchBar
    

在调试导航器中,

在尺寸检查器中,

【问题讨论】:

如果您删除所有弄乱搜索字段文本字段的hacky代码怎么办? @matt 还是和上面一样 看到这个寻求帮助:UISearchBarSearchField BackgroundView color 它的答案和我在这里写的代码一样,但在这里还是不行。 【参考方案1】:

尝试为搜索栏设置框架

searchController. searchBar.frame = CGRect(x: 0, y: 0, width:view.frame.size.width, height: 50)

【讨论】:

【参考方案2】:

你的代码对我来说很好用:

也许您的导航栏已折叠?如果您的导航项的hidesSearchBarWhenScrolling 属性为true,则导航栏可以折叠以隐藏搜索栏。

【讨论】:

它工作正常,但现在我的tableview在它下面,因为它无法更新它的框架,当我们点击搜索栏时,它正在调用tableview的didselect,因为它在它的框架下。因此,添加时的 searchController 不会变为活动状态

以上是关于iOS13 中的 SearchController的主要内容,如果未能解决你的问题,请参考以下文章

iOS 11 中的 SearchController。无法触摸任何 tableView 单元格

如何在 iOS 13 上最初隐藏导航控制器中的搜索栏?

iOS 13 UISearchBar 外观和行为

iOS11 SearchController - 从 navigationItem 中移除 SearchBar 会留下损坏的 UI

UISearchBar在iOS 11中的错误位置

iOS 11 上 UITableView 中的 UISearchController 问题