UISearchController在iOS 13上无法正常工作

时间:2019-10-01 20:31:51

标签: ios swift uisearchcontroller ios13

在iOS 13上旋转设备时,我在UISearchController上遇到问题。

我有一个tableView,这个tableView有一个searchBar作为标题。在iOS 13发行之前,它一直可以正常工作,现在旋转设备上出现了不良行为。

如果设备处于纵向方向并且searchBar处于焦点位置,那么我将设备旋转至横向,则searchBar位置不正确;正如您在下面的图片中看到的那样,搜索栏必须处于黄色视图中,但是有点下面了

enter image description here

但是当按下取消按钮时,搜索栏会移到正确的位置。

enter image description here

我已经调试了它,并且视图似乎是在正确的位置创建的,包括帧大小和原点。

当焦点位于搜索栏上并且方向为横向时,会发生类似的行为,然后将其更改为纵向。

我的添加搜索栏的代码:

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()
}

1 个答案:

答案 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。

enter image description here

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或更高版本,并保留了该应用程序的先前行为。