如果您有任何导航元素,则设置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添加到导航栏,并在其中添加到任何视图控制器。
再次-请在真实设备上对其进行测试。模拟器运行正常。