在视频中,很难看到发生了什么,所以我会尝试解释一下。https://youtu.be/yOrCJB9yZlg
我在其根视图中有UIViewController
和UITableView
。通过Autolayout
绑定(绑定方式没有区别:绑定到SuperView或绑定到SafeArea(。
SearchBar添加如下:
let search = UISearchController(searchResultsController: nil)
self.navigationItem.searchController = search
当我慢慢滚动表格时,大导航栏和紧凑导航栏之间的转换,以及在searchBar中显示和显示的动画太快了。搜索栏跳出导航栏而不是顺利打开/关闭;导航条的转换是在两种状态之间跳跃,大的和紧凑的,当你在屏幕上慢慢移动手指时,没有平稳地通过中间的半打开状态,就像在系统应用程序(邮件、电话、消息、联系人等(中一样。
我举了一个空项目的例子来说明这个问题;导航栏逻辑或任何逻辑都没有任何更改。只有两个新的VC和这种奇怪的行为。
如果我创建xCode的"MasterDetails"项目示例并将UISearchController
添加到其中,它将正常工作。我认为这是因为他们在里面使用了UITableViewController
而不是UIViewController
+UITableView
。
这种行为的原因是什么?如何解决?
我在搜索控制器转换和表视图方面也遇到了同样的问题。就像这样,它的闪烁或画面在跳跃。搜索控制器位于导航项上。
关键的解决方案是从视图控制器中删除安全区域指南,并为表视图指定上下左右约束。它会像这个一样平滑
您所做的是正确的。您是否尝试在设备中运行代码?感觉更像是模拟器中的故障。我试过你试过的,它在设备上对我来说很好。而故障发生在模拟器中。
请参阅本文。他们已经逐步解释了这个过程。
这是一个已知的问题,您的代码看起来很好。这个问题已经在这里讨论过了。
当您使用具有大型导航标题的UIScrollView
或其子类时,会出现问题。它不起作用。当您改用UICollectionViewController
或UITableViewController
时,问题就会消失。