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 плавно продвигает навигационную панель вверх.
При необходимости отправьте код, но мы никоим образом не модифицируем стандартное поведение (установка фреймов, перезапись методов делегирования и т.д.).
Любые идеи, что может быть причиной странных анимаций?
Ответы
Ответ 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;
сделал мою анимацию менее багги