UISearchController与状态栏重叠,不会填充iPhone X.

时间:2017-10-13 12:34:58

标签: ios iphone uisearchbar ios11 uisearchcontroller

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

enter image description here UISearchController首次提出。状态栏和搜索栏之间没有空格。

enter image description here 再次提出UISearchControllerUINavigationBar更大,搜索栏的状态栏更低。

第2期在iPhone X上,它不会覆盖整个空间

enter image description here

我花了好几个小时试图解决这个问题。还有其他的,简单的方法是在点击例如后在iOS 11上显示搜索栏。导航栏中的搜索图标?有没有办法在iPhone X上修复UISearchController导航栏的高度和空间?

1 个答案:

答案 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。