UISearchController 的 UISearchBar 在 UITableView 滚动时移位不正确并跳转
UISearchController's UISearchBar shifts incorrectly and jumps when UITableView is scrolled
在视频中,有点难以理解是怎么回事,所以我会尽力解释一下。
https://youtu.be/yOrCJB9yZlg
我的根视图中有 UIViewController
和 UITableView
。通过 Autolayout
绑定(绑定方式没有区别:绑定到 SuperView 或绑定到 SafeArea)。
SearchBar 添加如下:
let search = UISearchController(searchResultsController: nil)
self.navigationItem.searchController = search
当我慢慢滚动 table 时,大型导航栏和紧凑型导航栏之间的转换,然后是显示进出搜索栏的动画太快了。导航栏的搜索栏跳跃 in/out 而不是平滑 opened/closed;导航栏转换是在两种状态之间跳跃,大和紧凑,当您在屏幕上缓慢移动手指时,不会平滑地通过中间的半开状态,就像在系统应用程序(邮件、Phone、消息、联系人等)中一样。
我从一个空项目中制作了这个例子来演示这个问题;导航栏逻辑没有任何变化,或者根本没有任何逻辑。只有两个新的 VC 和这种奇怪的行为。
如果我创建 xCode 的 "Master-Details" 项目示例并向其中添加 UISearchController
,它将正常工作。我认为是因为他们在里面使用 UITableViewController
而不是 UIViewController
+ UITableView
。
此行为的原因是什么以及如何解决?
你所做的是正确的。您是否在设备中尝试 运行 您的代码?感觉更像是模拟器中的一个故障。我试过你试过的方法,它在我的设备上运行良好。而故障发生在模拟器中。
参考这个article。他们已经一步一步地解释了过程。
这是一个已知问题,您的代码似乎没有问题。这个问题已经讨论过here。
当您使用带有大导航标题的 UIScrollView
或其子类时会出现问题。它不起作用。当您改用 UICollectionViewController
或 UITableViewController
时,问题就会消失。
我在搜索控制器转换和表格视图方面遇到了同样的问题。
like this 它的闪烁或 tableview 正在跳跃。搜索控制器在导航项上。
关键的解决方案是从您的视图控制器中删除安全区域指南,并将左上角右下角约束分配给您的表视图。会很顺利like this
在视频中,有点难以理解是怎么回事,所以我会尽力解释一下。 https://youtu.be/yOrCJB9yZlg
我的根视图中有 UIViewController
和 UITableView
。通过 Autolayout
绑定(绑定方式没有区别:绑定到 SuperView 或绑定到 SafeArea)。
SearchBar 添加如下:
let search = UISearchController(searchResultsController: nil)
self.navigationItem.searchController = search
当我慢慢滚动 table 时,大型导航栏和紧凑型导航栏之间的转换,然后是显示进出搜索栏的动画太快了。导航栏的搜索栏跳跃 in/out 而不是平滑 opened/closed;导航栏转换是在两种状态之间跳跃,大和紧凑,当您在屏幕上缓慢移动手指时,不会平滑地通过中间的半开状态,就像在系统应用程序(邮件、Phone、消息、联系人等)中一样。
我从一个空项目中制作了这个例子来演示这个问题;导航栏逻辑没有任何变化,或者根本没有任何逻辑。只有两个新的 VC 和这种奇怪的行为。
如果我创建 xCode 的 "Master-Details" 项目示例并向其中添加 UISearchController
,它将正常工作。我认为是因为他们在里面使用 UITableViewController
而不是 UIViewController
+ UITableView
。
此行为的原因是什么以及如何解决?
你所做的是正确的。您是否在设备中尝试 运行 您的代码?感觉更像是模拟器中的一个故障。我试过你试过的方法,它在我的设备上运行良好。而故障发生在模拟器中。
参考这个article。他们已经一步一步地解释了过程。
这是一个已知问题,您的代码似乎没有问题。这个问题已经讨论过here。
当您使用带有大导航标题的 UIScrollView
或其子类时会出现问题。它不起作用。当您改用 UICollectionViewController
或 UITableViewController
时,问题就会消失。
我在搜索控制器转换和表格视图方面遇到了同样的问题。 like this 它的闪烁或 tableview 正在跳跃。搜索控制器在导航项上。
关键的解决方案是从您的视图控制器中删除安全区域指南,并将左上角右下角约束分配给您的表视图。会很顺利like this