UISearchController в iOS8 скрывает UITableView

Я реализовал 1UISearchController1 для своего табличного представления с областями и всем остальным. Однако он не отображается правильно при начальной загрузке представления.

В зависимости от моих действий я вижу четыре разные вещи.

Это то, что я вижу, когда вид впервые появляется. Я бы не ожидал, что появится полоса обзора:

Теперь, если я нажму на строку поиска, я вижу это:

Затем, если я снова нажму кнопку «Отмена», я увижу это в представлении таблицы:

Наконец, если я снова нажму на строку поиска, я увижу то, что ожидал, когда нажал на строку поиска в первый раз:

И если я отменю еще раз, теперь панель поиска правильно отображается в виде таблицы:

Вот соответствующая часть моего TableViewController.

class BaseWineTableViewController: UITableViewController, UITableViewDelegate, UINavigationControllerDelegate, UITableViewDataSource, UISearchResultsUpdating, UISearchBarDelegate, UISearchControllerDelegate {

    var resultSearchController = UISearchController()

    func ConfigureSearchController() {
        self.resultSearchController = UISearchController(searchResultsController: nil)
        self.resultSearchController.searchResultsUpdater = self
        self.resultSearchController.searchBar.delegate = self
        self.resultSearchController.delegate = self

        self.resultSearchController.searchBar.showsCancelButton = true
        self.resultSearchController.searchBar.autocapitalizationType = .None
        self.resultSearchController.searchBar.showsScopeBar = true
        self.resultSearchController.searchBar.scopeButtonTitles = ["All", CELLAR_STATUSES.Cellared, CELLAR_STATUSES.Wishlist, CELLAR_STATUSES.Finished]

        self.resultSearchController.definesPresentationContext = true
        self.resultSearchController.dimsBackgroundDuringPresentation = false
        self.tableView.tableHeaderView = resultSearchController.searchBar
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        ConfigureSearchController()
    }

person Evan Hicks    schedule 30.05.2015    source источник
comment
попробуйте настроить self.resultSearchController.searchBar внутри метода viewWillAppear: вместо viewDidLoad. мое объяснение состоит в том, что они также имеют дело с макетом, с которым не стоит возиться на viewDidLoad.   -  person Erakk    schedule 01.06.2015
comment
Спасибо, но это не помогло. Я думаю, что это как-то связано с инициализацией контроллера поиска в viewDidLoad, но я не знаю, где еще его инициализировать.   -  person Evan Hicks    schedule 02.06.2015
comment
self.tableView.tableHeaderView = resultSearchController.searchBar попробуйте поместить эту строку на viewWillAppear или layoutSubviews   -  person Erakk    schedule 02.06.2015
comment
Пробовал и это, но все равно не повезло.   -  person Evan Hicks    schedule 02.06.2015


Ответы (2)


Я понял. Когда я удалил эту строку:

self.resultSearchController.searchBar.showsScopeBar = true

Но оставили в строке, определяющей названия областей, это исправили.

person Evan Hicks    schedule 03.06.2015

У меня была такая же проблема, и, похоже, она возникла только в iOS8. В iOS9 панель поиска не закрывала табличное представление.

Я не использую полосу обзора, поэтому предложенное исправление ко мне не применимо.

При добавлении строки

[self.searchController.searchBar sizeToFit];

прежде чем назначать searchBar для просмотра таблицы, он отлично работал как в iOS8, так и в iOS9 для меня.

-(void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
    self.searchController.searchResultsUpdater = self;
    self.searchController.dimsBackgroundDuringPresentation = NO;
    self.searchController.searchBar.delegate = self;
    self.definesPresentationContext = YES;
    [self.searchController.searchBar sizeToFit];
    self.tableView.tableHeaderView = self.searchController.searchBar;
}
person masam    schedule 01.02.2016