0

У меня есть представление, которое содержит UISearchBar. Этот UISearchBar находится в , а не, который отображается в верхней части страницы - это примерно 90 пунктов вниз от верхней части экрана под заголовком.setContentOffset не правильно при отмене поиска

Все элементы вида завернуты в UIScrollView. Правильная вещь случается, когда пользователь нажимает на UISearchBar - весь просмотр прокручивается, поэтому панель поиска находится на самой верхней части экрана, над содержимым представления появляется темное оверлея, а клавиатура сдвигается вверх.

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

Я могу сделать это, если пользователь нажимает отменить пока отображается клавиатура - просто прослушайте UIKeyboardWillHideNotification, затем установите смещение содержимого прокрутки назад (0, 0).

Однако, если пользователь перетаскивает свой палец по некоторым результатам поиска, клавиатура уходит, поэтому вы можете получить больший обзор результатов поиска. Если пользователь ударяет, то строка поиска остается в верхней части страницы, и все выглядит ужасно.

Я пытался ставить код в «» setContentOffset в UISearchDisplayDelegate:

- (void)searchDisplayController:(UISearchDisplayController *)controller didHideSearchResultsTableView:(UITableView *)tableView 
{ 
    [_scrollView setContentOffset:CGPointMake(0,0) animated:YES]; 
} 

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

Затем я попробовал этот метод (который вызывается непосредственно перед табличным скрыт):

- (void)searchDisplayController:(UISearchDisplayController *)controller willHideSearchResultsTableView:(UITableView *)tableView 
{ 
    [_scrollView setContentOffset:CGPointMake(0,0) animated:YES]; 
} 

Однако, что не имеет никакого эффекта. Смещение содержимого не изменяется.

Любые советы?

ответ

0

Возможно, контроллер отображения поиска устанавливает для вас смещение содержимого? Попробуйте вместо этого установить смещение содержимого в searchDisplayController:didShowSearchResultsTableView:.

+0

Контроллер дисплея поиска, безусловно, устанавливает смещение содержимого, когда поисковая панель сначала получает фокус. Проблема, с которой я сталкиваюсь, возвращает смещение вида прокрутки обратно до 0, 0, когда пользователь отменяет отмену И клавиатура уже скрыта. searchDisplayController: didShowSearchResultsTableView: никогда не вызывается, когда пользователь отменяет отмену. – MikeQ

+0

Если вы не против чего-то слегка замаскированного, вы можете использовать что-то вроде '- (BOOL), реагируя на SelectSelector: (SEL) selector {NSLog (@"% @ ", NSStringFromSelector (селектор)); return [super отвечаетsToSelector: selector];} ', чтобы увидеть, какие другие методы использует UISearchDisplayController, и переопределить их, чтобы увидеть, имеют ли они эффект. –