iOS 13设置搜索控制器'hidesNavigationBarDuringPresentation = false'会破坏导航吗?

时间:2019-10-05 22:17:41

标签: uisearchbar uisearchcontroller ios13

如果您有任何导航元素,则设置searchController.hidesNavigationBarDuringPresentation = false似乎破坏了导航。导航元素在搜索栏处于活动状态时起作用,但是一旦您按“ Enter”键或取消搜索,它们就不会受到触摸。它们甚至可以在搜索工作中消失,或者可以与序列中的其他元素重叠。

它仅在装有iOS 13的真实设备上发生(我测试了两个)。模拟器运行正常。

如何复制: 创建一个空项目,将初始ViewController嵌入到NavigationController中,将带有序列的BarButonItem添加到另一个视图控制器。在初始视图控制器中,以编程方式设置搜索控制器,例如:

final class FirstViewController: UIViewController,UISearchResultsUpdating, UISearchControllerDelegate, UISearchBarDelegate {
var searchController: UISearchController!

override func viewDidLoad() {
    searchController = UISearchController(searchResultsController: nil)

    searchController.searchResultsUpdater = self
    searchController.searchBar.autocapitalizationType = .none
    searchController.hidesNavigationBarDuringPresentation = false
    if #available(iOS 11.0, *) {
        // For iOS 11 and later, place the search bar in the navigation bar.
        navigationItem.searchController = searchController
        navigationItem.hidesSearchBarWhenScrolling = false
    }
    searchController.delegate = self
    searchController.searchBar.delegate = self
    definesPresentationContext = true

}
func updateSearchResults(for searchController: UISearchController) {
    print("\(#file) | \(#line): ", searchController.searchBar.text)
} 

或者您可以下载Apple Project'Displaying Searchable Content by Using a Search Controller',在搜索控制器设置中添加第searchController.hidesNavigationBarDuringPresentation = false行,然后将UIBarButtonItem添加到导航栏,并在其中添加到任何视图控制器。

再次-请在真实设备上对其进行测试。模拟器运行正常。

0 个答案:

没有答案