iOS 11之前的导航项目以下搜索控制器



我毫无问题地使用此代码,但是我想将搜索控制器放在导航项目的titleView下方,而不是更换它。使用ios11,它就像将navigationItem.searchController设置为searchController一样容易,并且将其放在titleView下方,但在navigationItem中。

关于如何在iOS 11之前执行此操作的任何想法,而不是更换titleView

当前代码:

if #available(iOS 11, *) {
    navigationItem.searchController = searchController
    navigationItem.hidesSearchBarWhenScrolling = false
} else {
    navigationItem.titleView = searchController.searchBar
}

我不知道它是否仍然与您相关,但是对于任何搜索答案并最终到达这里的人来说,这是一种方法:

if #available(iOS 11.0, *) {
   navigationItem.searchController = searchController
} else {
   tableView.tableHeaderView = searchController.searchBar
}

@holger的答案有助于我在iOS 10中解决我的问题 - 按下取消时,它意外隐藏了整个导航栏。

由于我的应用程序在导航栏的标题上有一个徽标,因此在不使用时必须隐藏搜索栏。因此,我添加了一个搜索按钮作为rightBarButtonItem,然后按下时触发 @Holger的代码。

@IBAction func onSearchAction(_ sender: UIBarButtonItem) {
    if #available(iOS 11.0, *) {
        navigationItem.searchController = searchController
    } else {
        // Fallback on earlier versions
        searchController.hidesNavigationBarDuringPresentation = false
        tableView.tableHeaderView = searchController.searchBar
    }
    searchController.isActive = true
}
func didPresentSearchController(_ searchController: UISearchController) {
    asyncAfter(.milliseconds(300)) {
        searchController.searchBar.becomeFirstResponder()
    }
}

通过参考另一个答案,我在didPresentSearchController中添加了becomeFirstResponder(),并稍有延迟。因此,键盘将出现而无需敲击。最后,实现UISearchControllerDelegate,以便在取消时会消失:

func willDismissSearchController(_ searchController: UISearchController) {
    if #available(iOS 11.0, *) {
        navigationItem.searchController = nil
    } else {
        // Fallback on earlier versions
        tableView.tableHeaderView = nil
    }
}

相关内容

  • 没有找到相关文章

最新更新