2015-05-30 3 views
3

Я реализовал 1UISearchController1 для своего стола, с областями и всем. Однако он не отображается правильно, когда представление загружается изначально.iOS8 UISearchController Covers Up UITableView

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

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

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

Далее, если нажать на кнопку снова кнопку Отмена, я вижу это на табличном:

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

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

Вот соответствующая часть моей 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() 
    } 
+0

пытаются настроить 'self.resultSearchController.searchBar' внутри' 'viewWillAppear: метод вместо' viewDidLoad'. Мое объяснение заключается в том, что они также имеют дело с макетом, что не очень хорошо, что можно было бы использовать на 'viewDidLoad'. – Erakk

+0

Спасибо, но это не помогло. Я думаю, что это имеет какое-то отношение к инициализации контроллера поиска в viewDidLoad, но я не знаю, где еще его инициализировать. –

+0

'self.tableView.tableHeaderView = resultSearchController.searchBar' попытается поместить эту строку в' viewWillAppear' или 'layoutSubviews' – Erakk

ответ

2

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

self.resultSearchController.searchBar.showsScopeBar = true 

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

-1

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

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

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

[self.searchController.searchBar sizeToFit]; 

перед назначением SearchBar к Tableview, он работал отлично в обоих 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; 
} 
Смежные вопросы