UISearchController не работает должным образом на iOS 13 - PullRequest
0 голосов
/ 01 октября 2019

Я сталкиваюсь с проблемой на UISearchController, когда устройство поворачивается на iOS 13.

У меня есть tableView, и у этого tableView есть searchBar в качестве заголовка. Это работало должным образом до выпуска iOS 13, теперь на устройстве поворота появляется нежелательное поведение.

Если устройство находится в портретной ориентации, а панель поиска находится в фокусе, тогда я поворачиваю устройство в альбомную ориентацию, панель поискане в правильном положении;Как вы можете видеть на изображении ниже, панель поиска должна быть в желтом виде, но она немного ниже

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 голосов
/ 02 октября 2019

Я решил эту проблему, создав пользовательский UISearchController.

class CustomSearchController: UISearchController {

    var _searchBar: UISearchBar = UISearchBar.init()
    override var searchBar: UISearchBar {
        get { 
            return _searchBar 
        }

        set { 
            _searchBar = newValue 
        }
    }

}

Вместо использования UISearchBar по умолчанию, предоставляемого UISearchController, я переопределяю его новым UISearchBar, который я добавил в tableView.

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 или более поздней версии и сохраняет прежнее поведение приложения.

...