iOS 13 UISearchController + UIRefreshControl 故障

Posted

技术标签:

【中文标题】iOS 13 UISearchController + UIRefreshControl 故障【英文标题】:iOS 13 UISearchController + UIRefreshControl glitch 【发布时间】:2019-09-11 11:35:08 【问题描述】:

我使用UISearchControllerUITableViewController 中进行搜索,该UITableViewController 还支持通过UIRefreshControl 进行拉取刷新。

在简化的 Demo 项目中设置非常简单

override func viewDidLoad() 
  extendedLayoutIncludesOpaqueBars = true
  title = searchTerm ?? "Search"
  super.viewDidLoad()
  setupSearch()
  setupRefresh()


private func setupSearch() 
  searchController.searchResultsUpdater = self
  navigationItem.searchController = searchController
  definesPresentationContext = true

  //
  //  If this is set to `true` (which is also the default), 
  // UISearchBar and UIRefreshcontroll are buggy
  //
  navigationItem.hidesSearchBarWhenScrolling = true


private func setupRefresh() 
  refreshControl = UIRefreshControl()
  refreshControl?.addTarget(self, action: #selector(refresh), for: .valueChanged)

这在 ios 12 中有效,但现在在 iOS 13(使用 Xcode 11 GM 为 iOS 13 编译)中,刷新动画已损坏

到目前为止,我发现的唯一“修复”是将navigationItem.hidesSearchBarWhenScrolling 设置为false,但这显然会导致搜索栏始终停留在屏幕上,即使在滚动时也是如此。

这是一个演示该问题的示例项目:https://github.com/iv-mexx/UISearchControl-UIRefreshControl-iOS13-Bug/tree/feature/ios13

更新:这在 Xcode 11 GM Seed 2 中仍然存在问题

【问题讨论】:

【参考方案1】:

如果您的应用可以选择启用大标题,那么这似乎也可以解决该问题。

这可能是 Apple 在自己的应用程序中没有遇到此问题的原因。

【讨论】:

不确定这是否是一个选项,但很高兴知道,谢谢

以上是关于iOS 13 UISearchController + UIRefreshControl 故障的主要内容,如果未能解决你的问题,请参考以下文章

UISearchController 打开后,iOS 13 无法滚动到底部

使用 UISearchController 时,iOS 13 UIBarButtonItem 不可点击和重叠 UINavigationBars

在 iOS 13 中使用 UISearchController 时,状态栏在 iOS 中变为白色

自 IOS 13 以来,UISearchController 在状态栏中意外绘制 UITableView

UISearchController 中的取消按钮在 iOS 13 中没有正确消失

更新到 iOS 13 后 UISearchController UITextField 背景不显示白色