1

Я получаю странное, случайное, непоследовательное поведение от UISearchController, взаимодействующего с UINavigationController в iOS 8. После выбора строки поиска иногда iOS показывает вид справа, а иногда и один слева:Несогласованное взаимодействие между UISearchController и UINavigationController в iOS 8

two different views

Вы можете увидеть его better illustrated in motion on YouTube.

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

Вот код viewDidLoad где и панель поиска и панель инструментов настройки:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    // Create our 4 view-filter buttons & a flex space 
    self.mainButton   = [[UIBarButtonItem alloc] initWithTitle:@"Main"  style:UIBarButtonItemStylePlain target:self action:@selector(viewMain)]; 
    self.viewedButton   = [[UIBarButtonItem alloc] initWithTitle:@"Viewed" style:UIBarButtonItemStylePlain target:self action:@selector(viewViewed)]; 
    self.favoritesButton  = [[UIBarButtonItem alloc] initWithTitle:@"Favorites" style:UIBarButtonItemStylePlain target:self action:@selector(viewFavorites)]; 
    self.allButton    = [[UIBarButtonItem alloc] initWithTitle:@"All"  style:UIBarButtonItemStylePlain target:self action:@selector(viewAll)]; 
    UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil]; 

    // Add toolbar buttons 
    NSArray *rightSideButtons = @[self.mainButton, flexSpace, self.favoritesButton, flexSpace, self.viewedButton, flexSpace, self.allButton]; 
    [self setToolbarItems:rightSideButtons]; 
    [self.navigationController setToolbarHidden:FALSE animated:FALSE]; 

    // Set up search bar 
    self.searchResultsController = [[UITableViewController alloc] initWithStyle:UITableViewStylePlain]; 
    self.searchResultsController.tableView.dataSource = self; 
    self.searchResultsController.tableView.delegate = self; 

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

    self.searchController.searchResultsUpdater = self; 

    self.searchController.searchBar.frame = CGRectMake(self.searchController.searchBar.frame.origin.x, 
                 self.searchController.searchBar.frame.origin.y, 
                 self.searchController.searchBar.frame.size.width, 44.0); 

    self.tableView.tableHeaderView = self.searchController.searchBar; 

    // this tells the search controller where to display 
    self.definesPresentationContext = YES; 
} 

Любая идея, почему IOS кажется случайным переключаться между отображением панели инструментов или покрытие его с помощью клавиатуры? Дайте мне знать, если вам нужен еще какой-нибудь код, но я разместил все необходимые части.

Спасибо!

+0

Кроме того, FWIW, это на iOS 8.1, и я вижу те же результаты на iPad и iPhone, как и в симуляторе. – Nick

+0

Это хорошее наблюдение. Я не использую 'UIKeyboardWillHideNotification' или' UIKeyboardWillShowNotification' где-нибудь в моем коде. Должен ли я использовать их здесь? – Nick

ответ

0

Я установил это, изменив 2 вещи:

во-первых, я удалил строку [self.navigationController setToolbarHidden:FALSE animated:FALSE]; из моего viewDidLoad заявления (как показано в этом вопросе).

Во-вторых, в моем Storboard, я включил показывает панель инструментов на навигационной контроллер, содержащий затронутый Table View:

Metrics

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

По крайней мере, я надеюсь, что это имело значение ... иначе это, вероятно, вуду. :-)

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