UISearchController 与状态栏重叠并且不填充 iPhone X
Posted
技术标签:
【中文标题】UISearchController 与状态栏重叠并且不填充 iPhone X【英文标题】:UISearchController overlaps with status bar and doesn't fill iPhone X 【发布时间】:2017-10-13 12:34:58 【问题描述】:我在 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
导航栏高度和空间?
【问题讨论】:
实际上,原生日历应用的搜索具有相同的行为。所以我不确定这是否是错误。但是,我也想解决您提到的问题 2。 您解决了吗?我看到了同样的问题。事实上,日历应用程序也出现了同样的问题。使用 iOS 11UINavigationItem.searchController
不是一种选择,因为我不希望搜索栏在导航栏上永久存在。
有没有人解决上述问题?我也面临同样的问题。
【参考方案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 中可用。对于早期版本,请执行您已经在执行的任何操作,因为它将继续工作。
如果您进行上述更改,您可能会遇到搜索控制器占据整个屏幕的问题。要解决此问题,您可以在显示 UISearchController 的主 UIViewController 上设置“definesPresentationContext”属性:
//set up UISearchController
self.definesPresentationContext = true;
如果您最终将 definePresentationContext 属性设置为 true,请确保检查它不会干扰您的 VC 呈现的任何其他 UIViewController。
【讨论】:
如果我这样做,搜索栏将永久位于我的导航栏上(滚动期间除外),这是我不想要的。像您建议的那样在按钮按下时分配控制器看起来不错,但解雇navigationItem.searchController = nil
看起来很糟糕。有什么想法吗?以上是关于UISearchController 与状态栏重叠并且不填充 iPhone X的主要内容,如果未能解决你的问题,请参考以下文章
UISearchController 搜索栏与 CollectionView 重叠
UISearchController 的搜索栏与第一个 tableview 单元格重叠
UISearchBar 在活动时与 UITableView 内容重叠
UISearchController:searchBar 和 scopeBar 在第一次触摸事件上重叠
使用 UISearchController 时,iOS 13 UIBarButtonItem 不可点击和重叠 UINavigationBars