Подтвердить что ты не робот

UISearchController searchBar в анимировании tableHeaderView вне экрана

У меня есть UISearchController с UITableViewController как searchResultsController, UISearchBar этого searchController установлен в tableHeaderView моего текущего tableView, отображаемого в моем корневом ViewController. Как и ожидалось, почти все работает хорошо. Но в анимации UISearchBar (Когда я нажимаю на объекты searchBar и UINavigationBar, а searchBar идет вверх, как и в UISearchDisplayController), у меня странное поведение. Вместо того, чтобы переместиться в положение UINavigationBar (y: 0), он выпрыгивает из экрана и запускает анимацию, которая показывает кнопку отмены. Я попытался переместить код экземпляра в viewDidLoad вместо init, и все будет точно таким же. Я думаю, что центр проблемы находится в рамке представления searchResultsController, но я не уверен в этом (я попытался установить кадр без успеха). Все, что я делаю, - это чистый код.

Вот соответствующая часть кода:

    self.searchController = [[UISearchController alloc] initWithSearchResultsController:self.searchResultsController];
    self.searchController.delegate = self;
    self.searchController.searchResultsUpdater = self;
    self.searchController.searchBar.delegate = self;

    [self.searchController.searchBar sizeToFit];
    self.tableView.tableHeaderView = self.searchController.searchBar;

    self.searchController.definesPresentationContext = YES;

И у меня есть ленивая нагрузка для searchResultsController:

- (UITableViewController *)searchResultsController {
if (_searchResultsController == nil) {
    _searchResultsController = [[UITableViewController alloc] initWithStyle:UITableViewStylePlain];
    _searchResultsController.tableView.delegate = self;
    _searchResultsController.tableView.dataSource = self;

return _searchResultsController;

}

Я загрузил образец кода из apple, но они используют storyBoards и xib для UITableViewCell, SearchController отлично работает в проекте. У кого-то была такая же проблема? Как я могу это исправить? Любые решения или предложения будут оценены.

Спасибо за внимание.

4b9b3361

Ответ 1

Добавить

self.extendedLayoutIncludesOpaqueBars = YES;

on viewDidLoad метод

Ответ 2

Вы пытались установить для hidesNavigationBarDuringPresentation значение false? Решила мою головную боль..

self.searchController.hidesNavigationBarDuringPresentation = false;

Помещение поисковой панели в панель навигации дает более надежный пользовательский интерфейс (на iphone)

self.navigationItem.titleView = self.searchController.searchBar;

Ответ 3

Чтобы этот более понятный ответ @Lorenzo работал у меня.

self.definesPresentationContext = YES;

Ответ 4

Попробуйте следующее:

Сначала вам нужно делегировать

UISearchControllerDelegate

Для Swift

func willPresentSearchController(searchController: UISearchController) {
    self.navigationController?.navigationBar.translucent = true
}

func willDismissSearchController(searchController: UISearchController) {
    self.navigationController?.navigationBar.translucent = false
}

Ответ 5

В Swift попробуйте:

override func viewDidLoad() {
    edgesForExtendedLayout = []
    searchController.hidesNavigationBarDuringPresentation = false

    // ...
}

Ответ 6

SWIFT 3.01

func willPresentSearchController(searchController: UISearchController){
self.navigationController?.navigationBar.isTranslucent = true
}

func willDismissSearchController(searchController: UISearchController) {
self.navigationController?.navigationBar.isTranslucent = false
}

Ответ 7

Я заметил, что UISearchController отлично работает в одном из моих представлений, но не в другом. Проблема была в UITableViewController, а не в UIViewController. Если вы переключитесь на UIViewController с UITableView внутри него и должным образом ограничены, проблем нет. Я реализовал мой с XIB, и он отлично работал.