在iOS 13上旋转设备时,我在UISearchController上遇到问题。
我有一个tableView,这个tableView有一个searchBar作为标题。在iOS 13发行之前,它一直可以正常工作,现在旋转设备上出现了不良行为。
如果设备处于纵向方向并且searchBar处于焦点位置,那么我将设备旋转至横向,则searchBar位置不正确;正如您在下面的图片中看到的那样,搜索栏必须处于黄色视图中,但是有点下面了
但是当按下取消按钮时,搜索栏会移到正确的位置。
我已经调试了它,并且视图似乎是在正确的位置创建的,包括帧大小和原点。
当焦点位于搜索栏上并且方向为横向时,会发生类似的行为,然后将其更改为纵向。
我的添加搜索栏的代码:
func setupSearchBar() {
searchController.searchResultsUpdater = self
searchController.hidesNavigationBarDuringPresentation = false
searchController.delegate = self
searchController.definesPresentationContext = true
searchController.searchBar.returnKeyType = UIReturnKeyType.done
searchController.searchBar.placeholder = "search here ..."
searchController.searchBar.tintColor = UIColor.red
searchController.searchBar.delegate = self
let yellowView: UIView = UIView.init(frame: searchController.searchBar.frame)
yellowView.backgroundColor = UIColor.yellow
yellowView.addSubview(searchController.searchBar)
tableView.tableHeaderView = yellowView
tableView.reloadData()
}
答案 0 :(得分:0)
我通过创建自定义UISearchController解决了此问题。
class CustomSearchController: UISearchController {
var _searchBar: UISearchBar = UISearchBar.init()
override var searchBar: UISearchBar {
get {
return _searchBar
}
set {
_searchBar = newValue
}
}
}
代替使用UISearchController提供的默认UISearchBar,我将其替换为添加到tableView的新UISearchBar。
func setupSearchBar() {
searchController.searchBar = searchBar
searchController.searchResultsUpdater = self
searchController.hidesNavigationBarDuringPresentation = false
searchController.delegate = self
searchController.definesPresentationContext = true
searchController.searchBar.returnKeyType = UIReturnKeyType.done
searchController.searchBar.placeholder = "search here ..."
searchController.searchBar.tintColor = UIColor.red
searchController.searchBar.delegate = self
tableView.tableHeaderView = searchController.searchBar
}
此解决方案适用于iOS 9或更高版本,并保留了该应用程序的先前行为。