iOS 13 UISearchController + UIRefreshControl故障

时间:2019-09-11 11:35:08

标签: ios uitableview uisearchcontroller uirefreshcontrol ios13

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

在简化的演示项目中,安装非常简单

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编译)中,刷新动画已损坏

enter image description here

到目前为止,我发现的唯一“解决方法”是将navigationItem.hidesSearchBarWhenScrolling设置为false,但这显然会使搜索栏始终保持在屏幕上,即使在滚动时也是如此。

以下是一个示例项目,演示了此问题:https://github.com/iv-mexx/UISearchControl-UIRefreshControl-iOS13-Bug/tree/feature/ios13

更新:这在Xcode 11 GM Seed 2中仍然没有得到解决

1 个答案:

答案 0 :(得分:2)

如果为您的应用选择打开大标题,这似乎也可以解决此问题。

这可能就是为什么Apple不在自己的应用程序中遇到问题的原因。