SearchBar 处于活动状态时会超出 UINavigationItem 框架

Posted

技术标签:

【中文标题】SearchBar 处于活动状态时会超出 UINavigationItem 框架【英文标题】:SearchBar goes out of UINavigationItem frame when it is active 【发布时间】:2017-11-01 06:54:48 【问题描述】:

我将searchControllersearchBar 放在navigationItem 中作为titleView 如下:

self.navigationItem.titleView = self.searchController.searchBar;

虽然它在未选中时非常适合(取消项目未显示),但如果它成为第一响应者并且取消项目出现在searchBar 旁边,它会稍微滑到navigationItem 下方。你可以看到下面的结果:

我该如何解决这个问题?有解决办法吗?

【问题讨论】:

【参考方案1】:

您应该使用self.navigationItem.searchController 而不是self.navigationItem.titleView

self.navigationItem.searchController = self.searchController;

在此处了解更多信息https://developer.apple.com/documentation/uikit/uinavigationitem/2897305-searchcontroller

【讨论】:

它只适用于 ios 11 它在导航栏下创建一个新行并在那里显示搜索栏。我必须在一行中显示退出和取消项目之间的 searchBar,如图所示。 你是否尝试添加 self.definesPresentationContext = YES; 还有一个,你可以试试我在这个问题上的回答***.com/questions/46940042/… @trungduc self.definesPresentationContext 不影响 searchBar 的位置。【参考方案2】:

使用下面的代码

if #available(iOS 11.0, *) 
     navigationItem.searchController = searchController
 else 
     // Fallback on earlier versions
     navigationItem.titleView = searchController?.searchBar

【讨论】:

请看我为 trungduc 写的评论。

以上是关于SearchBar 处于活动状态时会超出 UINavigationItem 框架的主要内容,如果未能解决你的问题,请参考以下文章

当 UISearchController 的 searchBar 处于活动状态时,点击 UITableView 索引 (A...Z)

在搜索栏处于活动状态时删除表格视图中的单元格 - CoreData 错误

如果背景音频处于活动状态,MPMoviePlayerController 将冻结

使用 didSelectRowAtIndexPath 进行转场

在 SwiftUI 中,如何使手势在容器视图之外处于非活动状态?

将 UISegmentedControl 与 UISearchController 一起使用