我在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编译)中,刷新动画已损坏
到目前为止,我发现的唯一“解决方法”是将navigationItem.hidesSearchBarWhenScrolling
设置为false
,但这显然会使搜索栏始终保持在屏幕上,即使在滚动时也是如此。
以下是一个示例项目,演示了此问题:https://github.com/iv-mexx/UISearchControl-UIRefreshControl-iOS13-Bug/tree/feature/ios13
更新:这在Xcode 11 GM Seed 2中仍然没有得到解决
答案 0 :(得分:2)
如果为您的应用选择打开大标题,这似乎也可以解决此问题。
这可能就是为什么Apple不在自己的应用程序中遇到问题的原因。