我在iOS 11上遇到了很多问题,并通过在导航栏上显示UISearchController
来显示UINavigationBar
(如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)
}
它正在隐藏应用程序的
UISearchController
,并使用搜索栏显示UISearchController
。问题1。在iOS 11上,它导致搜索栏第一次出现时与状态重叠(重试后不重叠)。
首次显示
UISearchController
。状态栏和搜索栏之间没有空格。再次显示
UINavigationBar
,UISearchController
较大,搜索栏为较低状态栏。第2期在iPhone X上,展示时并不能覆盖整个空间
我已经花了数小时试图找出答案。还有其他简单的方法,例如点击后在iOS 11上显示搜索栏。导航栏中的搜索图标?有没有办法在iPhone X上修复ojit_code导航栏的高度和空间?
最佳答案
在苹果公司的“Building Apps for iPhone X”视频中,苹果公司建议使用UINavigationBar的searchController属性,而不是手动显示搜索 Controller 。
下面是它的工作原理:
if #available(iOS 11, *) {
self.navigationItem.searchController = searchController;
searchController.isActive = true;
} else {
self.present(searchController, animated: true, completion: nil)
}
请注意,此功能仅在iOS 11中可用。对于早期版本,请执行您已做的任何事情,因为它将继续起作用。
如果您进行上述更改,则搜索 Controller 占据整个屏幕的位置可能会出现问题。要解决此问题,您可以在显示UISearchController的主UIViewController上设置'definesPresentationContext'属性:
//set up UISearchController
self.definesPresentationContext = true;
如果最终将definePresentationContext属性设置为true,请确保检查它是否不影响VC呈现的任何其他UIViewControllers。
关于ios - UISearchController与状态栏重叠,并且没有填充iPhone X,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46730074/