我在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上,它导致搜索栏第一次出现时与状态重叠(重试后不重叠)。

ios - UISearchController与状态栏重叠,并且没有填充iPhone X-LMLPHP
首次显示UISearchController。状态栏和搜索栏之间没有空格。

ios - UISearchController与状态栏重叠,并且没有填充iPhone X-LMLPHP
再次显示UINavigationBarUISearchController较大,搜索栏为较低状态栏。

第2期在iPhone X上,展示时并不能覆盖整个空间

ios - UISearchController与状态栏重叠,并且没有填充iPhone X-LMLPHP

我已经花了数小时试图找出答案。还有其他简单的方法,例如点击后在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/

10-14 21:36