2016-01-27 4 views
-1

Я вытаскиваю свои волосы с помощью этого. Я создал эту точку зрения в раскадровке:Поиск Бар не отображается на iPhone 4S

enter image description here

Когда я запущенный на iPhone 5S он работает нормально, Search Bar отображается, как это должно быть. Но когда я бегу на iPhone 4S, панель поиска не отображается, как вы можете видеть на изображении ниже: enter image description here

Запуск на эмуляторе корректно отображает панель поиска любого размера. В моей viewDidLoad У меня есть следующий код:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    [self.processTableView setDelegate:self]; 
    [self.processTableView setDataSource:self]; 

    self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil]; 
    self.searchController.searchResultsUpdater = self; 
    self.processTableView.tableHeaderView = self.searchController.searchBar; 

    self.definesPresentationContext = YES; 
} 

Я только что узнал, что моя проблема связана с линией self.processTableView.tableHeaderView = self.searchController.searchBar;, но я не понимаю, почему. Кто-нибудь знает, что здесь происходит?

+0

Пробовал ли прокрутить его? полоса прокрутки может выйти за панель навигации. –

+0

Привет, мистер Т, да, я прокрутил, чтобы посмотреть, все ли это позади, но ничего. Я также попытался добавить его в TableView, но с линией iself.processTableView.tableHeaderView = self.searchController.searchBar; 'он не отображается. – mxmlc

+1

попробуйте это, выберите ваш 'tableview', затем' clear constraints'. Then выберите 'Сброс к предлагаемым ограничениям'. (Выберите их из' Resolve Auto Layout issues') –

ответ

1

Я использовал часть кода, предоставленной @ user1079052:

[self.searchController.searchBar sizeToFit]; 
self.searchController.hidesNavigationBarDuringPresentation = NO; 

Добавление его к моему существующему коду сделал панель поиска видна на iPhone 4S и поддерживал такое же поведение на iPhone 5S. Тем не менее, панель поиска была отображена поверх таблицы. Чтобы решить эту проблему, я вычислил высоту бара и снова установил его. Итак, мой viewDidLoad выглядит следующим образом:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    [self.processTableView setDelegate:self]; 
    [self.processTableView setDataSource:self]; 

    self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil]; 
    self.searchController.searchResultsUpdater = self; 
    self.searchController.dimsBackgroundDuringPresentation = NO; 
    self.processTableView.tableHeaderView = self.searchController.searchBar; 

    [self.searchController.searchBar sizeToFit]; 
    self.searchController.hidesNavigationBarDuringPresentation = NO; 

    CGFloat height = [self.searchController.searchBar systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height; 
    CGRect frame = self.searchController.searchBar.frame; 
    frame.size.height = height; 
    self.searchController.searchBar.frame = frame; 
    self.processTableView.tableHeaderView = self.searchController.searchBar; 
} 

Я хотел бы спасибо все ответы.

0

Я думаю, вы должны добавить строку поиска вашего searchController в headerView вместо установки HeaderView в searchBar. Что-то вроде:

[self.processTableView.tableHeaderView addSubview:self.searchController.searchBar]; 

Если вы сделаете это, это значит, что вы можете удалить SearchBar из раскадровки.

+0

Привет, Чарльз, я удалил панель поиска с раскадровки и добавил предложенную строку, но не успел. – mxmlc

0

Если вы видите, что панель сзади при прокрутке вниз, это должно быть проблемой. Поймайте попытку с удалением ручных ограничений (не «четкие ограничения»).

+0

Achron, для 'Search Bar и Search Display Controller' нет никаких ограничений для создания. Панель поиска автоматически добавляется в верхнюю часть таблицы. – mxmlc

+0

Проблема заключается в отсутствии ограничений в строке поиска, но может быть видом. Я вижу, что у вас есть их в представлении «Просмотр» и «Содержимое». Я воображаю, что вы создали представления для 5S, но те же ограничения остаются и для 4S. Может быть, они должны быть проблемой. – Achron

1

Вы попробовали
self.definesPresentationContext = YES;

Это, как я его реализации:

self.searchController = 
     [[UISearchController alloc] initWithSearchResultsController:nil]; 
    self.searchController.searchResultsUpdater = self; 
    self.searchController.dimsBackgroundDuringPresentation = NO; 

    self.searchController.searchBar.delegate = self; 
    self.tableView.tableHeaderView = self.searchController.searchBar; 
    self.definesPresentationContext = YES; 
    [self.searchController.searchBar sizeToFit]; 
    self.searchController.hidesNavigationBarDuringPresentation = NO; 
+0

Привет, я определил 'definePresentationContext', но ваш ответ помог мне проверить некоторые другие ситуации. Благодаря! – mxmlc

Смежные вопросы