Подтвердить что ты не робот

UISearchBar в UITableViewHeader странная анимация на iOS 7/8

У нас есть класс SearchTableViewController, который содержит UISearchBar как tableViewHeader его UITableView. Мы также используем UISearchDisplayController, делегат которого (searchResultsDelegate и searchResultsDataSource) является тем же контроллером, который содержит tableView, содержащий searchBar.

Поиск сам по себе прекрасно работает, но анимация при входе/выходе из режима поиска действительно странная:

Странная анимация 1

В другом контроллере представления (подкласс SearchTableViewController) проблема еще более заметна:

Странная анимация 2

Я попытался реализовать различные методы UISearchDisplayDelegate (например, -(void)searchDisplayControllerWillBeginSearch:), но их либо слишком поздно (когда анимация уже закончена), либо только при придании текстовому полю UISearchBar фокуса. Есть ли какие-либо методы, которые мне не хватает, что может позволить мне изменить анимацию до, это произойдет? Также обратите внимание, что панель навигации сразу же исчезает в первом видео. Я попытался вручную настроить его на "не скрытый" в нескольких местах, что ничего не меняло.

Наш navigationBar настроен на not быть полупрозрачным, если это имеет значение. На iOS 6 все работает так, как ожидалось, searchBar плавно продвигает навигационную панель вверх.

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

Любые идеи, что может быть причиной странных анимаций?

4b9b3361

Ответ 1

Я разговаривал с инженером Apple на iOS 7 Tech Talks, который тоже не мог мне помочь. После дальнейшего исследования я обнаружил, что первой проблемой является поведение по умолчанию для iOS 7 (.0.4).

Обновить: ошибка все еще присутствует в 7.1.

Второе обновление: ошибка все еще присутствует в версии 8.1.

Третье обновление: ошибка все еще присутствует в 8.4.

Четвертое обновление: ошибка все еще присутствует в 9.2

Шаги для воспроизведения:

  • Создайте новое универсальное примерное приложение Master-Detail в SDK Xcode 5/iOS 7.
  • Добавьте UISearchBar ( EDIT: для iOS 8, используйте "Панель поиска и поисковый контроллер дисплея" ) в MasterViewController TableView (не имеет значения, если в InterfaceBuilder или в коде)
  • Запустите проект, включите медленную анимацию и нажмите на панель поиска.
  • Анимации при запуске/отмене поиска странны на iPad, но отлично выглядят на iPhone: Проект шаблона запускается на iPad. Я отправил сообщение об ошибке, будет обновлен, если эта проблема будет исправлена.

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

[self setAutomaticallyAdjustsScrollViewInsets:YES];
[self setExtendedLayoutIncludesOpaqueBars:YES];

После включения этих двух строк в viewDidLoad: анимация выглядит "отлично" - это то же самое, что и ошибка из образца проекта.

Ответ 2

Мой ответ здесь помог моей конкретной ситуации для странного поведения анимации:

Я обнаружил, что

self.navigationController.navigationBar.translucent = YES;

сделал мою анимацию менее багги