我在iOS 11上遇到很多问题并通过导航栏显示UISearchController
(如here所述,例如Apple教程中的例子)
@IBAction func searchAction(sender: UIBarButtonItem) {
// Create the search controller and specify that it should present its results in this same view
searchController = UISearchController(searchResultsController: nil)
// Make this class the delegate and present the search
self.searchController.searchBar.delegate = self
presentViewController(searchController, animated: true, completion: nil)
}
隐藏了应用UINavigationBar
,并在搜索栏中显示UISearchController
。
问题1。在iOS 11上,它会导致搜索栏在第一次出现时与状态重叠(再次尝试后不会重叠)。
UISearchController
首次提出。状态栏和搜索栏之间没有空格。
再次提出UISearchController
,UINavigationBar
更大,搜索栏的状态栏更低。
第2期在iPhone X上,它不会覆盖整个空间
我花了好几个小时试图解决这个问题。还有其他的,简单的方法是在点击例如后在iOS 11上显示搜索栏。导航栏中的搜索图标?有没有办法在iPhone X上修复UISearchController
导航栏的高度和空间?
答案 0 :(得分:1)
在Apple" Building Apps for iPhone X"视频,Apple建议使用UINavigationBar的searchController属性,而不是手动呈现搜索控制器。
以下是它的工作原理:
if #available(iOS 11, *) {
self.navigationItem.searchController = searchController;
searchController.isActive = true;
} else {
self.present(searchController, animated: true, completion: nil)
}
请注意,这仅适用于iOS 11.对于早期版本,请执行您已经在做的任何事情,因为它将继续有效。
如果您进行上述更改,则可能会出现搜索控制器占据整个屏幕的问题。要解决此问题,您可以设置" definesPresentationContext'主UIViewController上的属性显示来自:
的UISearchController//set up UISearchController
self.definesPresentationContext = true;
如果最终将definePresentationContext属性设置为true,请确保检查它是否不会干扰VC提供的任何其他UIViewControllers。