【问题标题】:UISearchController's UISearchBar shifts incorrectly and jumps when UITableView is scrolledUISearchController 的 UISearchBar 在 UITableView 滚动时移位不正确并跳转
【发布时间】:2018-11-19 13:23:17
【问题描述】:

在视频中,有点难以理解发生了什么,所以我会尝试解释一下。 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

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

【问题讨论】:

  • 你的问题有点混乱。您的问题是搜索关闭/打开太快,而不是像系统应用程序那样流畅吗?
  • 是的,完全正确。不知道怎么解释清楚。

标签: ios swift uinavigationbar uisearchbar uisearchcontroller


【解决方案1】:

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

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

【讨论】:

  • 我可以确认从代码创建UITableView 并将其插入UIViewController 解决了我在示例中的问题。但我还必须从代码手动创建UINavigationController(在AppDelegate 中创建UIWindow,然后UINavigationViewController 以我的ViewController 作为root)。否则它没有工作。 IB 的行为非常奇怪。 xCode 的错误?
  • 谢谢!顺便说一句,来自 IB 的所有东西的创建都在使用来自答案 stackoverflow.com/a/50171002/667483 的这些设置
【解决方案2】:

这是一个已知问题,您的代码看起来不错。这个问题已经讨论过here

当您使用UIScrollView 或其具有大导航标题的子类时会出现问题。它不起作用。当您改用 UICollectionViewControllerUITableViewController 时,问题就会消失。

【讨论】:

  • 谢谢!这个线程也很有帮助。这个stackoverflow.com/a/50171002/667483 解决了所有问题,即使使用 IB。我不知道哪个答案最正确,他们都以不同的方式解决了我的问题。我投票给Manju Basha以提高声誉! :)
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 2013-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多