В моем приложении iOS мое окно rootViewController - это контроллер панели вкладок с такой иерархией, как это:
- UITabBarController
- UINavigationController 1
- FirstContentController
- UINavigationController 2
- ...
- UINavigationController 3
- ...
- ...
- UINavigationController 1
Когда пользователь удаляет определенную строку на FirstContentController
, экземпляр SecondController
будет нажат на его навигационный контроллер. SecondContentController
устанавливает hidesBottomBarWhenPushed
в YES
в свой метод init
и устанавливает self.navigationController.toolbarHidden
в NO
в viewWillAppear:
.
В iOS 6 пользователь будет использовать строку в FirstController
, а SecondController
будет нажата на навигационный контроллер. Поскольку он имеет hidesBottomBarWhenPushed
, он скроет панель вкладок, и к моменту завершения анимации перехода SecondController
появится на экране с видимой панелью инструментов.
Однако при тестировании этого в iOS 7 поведение hidesBottomBarWhenPushed
, похоже, изменилось. Теперь я вижу:
- панель вкладок скрывается, как ожидалось
- появится панель инструментов, как ожидалось
- между панелью инструментов и представлением содержимого появляется пробел неиспользуемого пространства ровно 49 пикселей в высоту (высота полосы вкладок)
Разрыв полностью непригодный - он не реагирует на касания, и если я устанавливаю clipsToBounds
на YES на главном экране, ничего не рисует. После много отладки и изучения иерархии подзаголовков это выглядит так: механизм автозамены iOS изменяет размер представления контроллера вида на высоту 411 (на iPhone 5). Это должно быть 460, чтобы дойти до панели инструментов, но система компоновки, похоже, включает в себя панель "призраков" с 49-пиксельной высотой.
Эта проблема возникает только в том случае, если контроллер представления имеет контроллер панели вкладок как один, если его родительские контейнеры.
На iOS 7, как я могу заставить панель вкладок исчезнуть, и панель инструментов легко встанет на место, когда новый контроллер будет нажат, и все еще есть представление, занимающее все пространство между элементом навигации и панелью инструментов?
ОБНОВЛЕНИЕ
После дальнейшего исследования это произойдет, только если для параметра SecondController edgesForExtendedLayout
установлено значение UIRectEdgeNone
. Однако, если я не установил это свойство в UIRectEdgeNone
, рамка представления слишком длинная и расширяется под панелью инструментов, где ее невозможно увидеть или взаимодействовать с ней.