UISearchController的UISearchBar移动不正确,并且在滚动UITableView时跳转

时间:2018-11-19 13:23:17

标签: ios swift uinavigationbar uisearchbar uisearchcontroller

在视频中,很难看到发生了什么,所以我将尽力对其进行解释。 https://youtu.be/yOrCJB9yZlg

我的根视图中有UIViewControllerUITableView。通过Autolayout进行绑定(绑定方式没有任何不同:绑定到SuperView或SafeArea)。

SearchBar添加如下: let search = UISearchController(searchResultsController: nil) self.navigationItem.searchController = search

当我缓慢滚动表格时,大型导航栏和紧凑型导航栏之间的过渡以及显示和显示searchBar的动画太快了。搜索栏跳入/跳出导航栏,而不是顺利打开/关闭;导航栏过渡在大而紧凑的两个状态之间跳跃,而在系统中(例如邮件,电话,消息,联系人等)中缓慢移动手指时,没有平稳地通过中间的半开状态。

我从一个空项目中举了一个例子来演示这个问题;导航栏逻辑没有任何变化,或者根本没有任何逻辑。只是两个新的VC,这种奇怪的行为。

如果我创建xCode的“ Master-Details”项目示例并向其中添加UISearchController,它将正常工作。我认为这是因为他们在内部使用了UITableViewController而不是UIViewController + UITableView

此行为的原因是什么以及如何解决?

3 个答案:

答案 0 :(得分:1)

您所做的是正确的。您是否尝试在设备中运行代码?感觉更像是模拟器中的故障。我尝试了您尝试的方法,并且在设备中对我来说效果很好。而毛刺出现在模拟器中。

请参阅此article。他们已经逐步解释了过程。

答案 1 :(得分:1)

这是一个已知问题,您的代码似乎正常。已经在 here 中讨论了此问题。

当您使用UIScrollView或其较大导航标题的子类时,出现问题。没用当您改用UICollectionViewControllerUITableViewController时,问题消失了。

答案 2 :(得分:1)

我在搜索控制器转换和表格视图方面遇到了同样的问题。 like this的闪烁或表格视图跳动。搜索控制器位于导航项上。

关键解决方案是从视图控制器中删除安全区域指南,并为您的tableview分配左上右下约束。 like this