Панель поиска iOS 7 UISearchDisplayController исчезает

Недавно я обновил свое приложение и столкнулся с этой проблемой. Когда я набираю строку поиска, панель поиска исчезает, и я могу видеть только представление таблицы. Я все еще могу продолжать печатать, и представление таблицы обновляется, но я не вижу строку поиска. Те же настройки отлично работают на iOS < 7

Любая идея, почему это происходит?

Step 1Step 2Step 3

Ответ 1

Немного поздно, но я столкнулся с той же проблемой совсем недавно. Я хотел, чтобы панель поиска была видимой и активной во всех поисках, поэтому тусклое представление, которое наложило его, было большой проблемой. Для меня единственное, что сработало, это изменение рамки тусклого вида (видимо, это не то же самое, что изменение рамки поискаResultsTableView). Мне удалось сделать это со следующим кодом:

-(void)setCorrectFrames
{
    // Here we set the frame to avoid overlay
    CGRect searchDisplayerFrame = self.searchDisplayController.searchResultsTableView.superview.frame;
    searchDisplayerFrame.origin.y = CGRectGetMaxY(self.searchDisplayController.searchBar.frame);
    searchDisplayerFrame.size.height -= searchDisplayerFrame.origin.y;
    self.searchDisplayController.searchResultsTableView.superview.frame = searchDisplayerFrame;    
}

-(void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller
{
    [self setCorrectFrames];
}

-(void)searchDisplayControllerDidBeginSearch:(UISearchDisplayController *)controller
{
    [self setCorrectFrames];
}

Ответ 2

попробуйте изменить размер поискаРезультатыВкладка TableView на

-(void)searchDisplayController:(UISearchDisplayController *)controller 
 didShowSearchResultsTableView:(UITableView *)tableView

Ответ 3

-(void)setCorrectSearchBarFrames
{
    //INFO: Here we set the frame to avoid overlay
    CGRect searchDisplayerFrame = self.searchDisplayController.searchResultsTableView.frame;
    searchDisplayerFrame.origin.y = 40.0;
    searchDisplayerFrame.size.height -= 40.0;
    self.searchDisplayController.searchResultsTableView.frame = searchDisplayerFrame;
}

Спасибо Тихи. Если я использую этот блок кода, панель поиска вернется!

Получайте удовольствие, я надеюсь, что это может вам помочь.

Ответ 4

У меня почти был умственный распад, так как я не мог заставить панель поиска показывать в новом проекте приложения. Панель поиска не отображалась в контроллере навигации, хотя я сделал следующее:

1) Добавьте компонент "Контроллер панели поиска и поиска" в мой контроллер просмотра раскадровки (в панели ниже представления, а не в представлении).

2) В viewDidLoad вызовите "self.searchDisplayController.displaysSearchBarInNavigationBar = YES;"

Единственное, что произошло, это то, что я получил ярлык (!), который сказал "Поиск".

После непродолжительного времени я создал новый проект и начал воссоздавать нерабочий, по частям. Я начал с раскадровки... и теперь панель поиска DID. Затем я добавил такие библиотеки, как Google Analytics, внешние компоненты и т.д. Пока проект не был идентичен тому, который не работал... и теперь проблема вернулась! Нет строки поиска!

Когда я начал удалять файлы, я наконец обнаружил, что это код кода категории (который я не ссылаюсь, но это в проекте), который называется UISearchBar + SearchField и который определяет свойство readonly.

Файл .h выглядит следующим образом:

@interface UISearchBar (SearchField2)

@property (nonatomic, readonly) UITextField *searchField;

@end

И файл .m выглядит так:

#import "UISearchBar+SearchField.h"

@implementation UISearchBar (SearchField)

- (UITextField *)searchField {
    NSUInteger subViewCount = [self.subviews count];
    for (int i = 0; i < subViewCount; i++) {
        if ([[self.subviews objectAtIndex:i] isKindOfClass:[UITextField class]]) {
            return [self.subviews objectAtIndex:i];
        }
    }
    return nil;
}

@end

Как только я удалил или переименовал это свойство, все начало работать.

Это очень (!), характерное для моей безумно странной проблемы, но, возможно, это помогает кому-то.