Является ли окно превосходным видом представления [[window rootViewController]]
Вопрос
Окно приложения (типа UIWindow *
, свойство в делегате приложения) супер вид [[window rootViewController] view]
?
Мой код в методе делегата приложения application:didFinishLaunchingWithOptions:
является [self window setRootViewController:[self myNavigationController]]
(self
относится к делегату приложения). Обратите внимание, что я не писал [self window addSubview:[[self myNavigationController] view]];
,
Я программно создаю все представления (без раскадровки, без конструктора интерфейса), используя не-ARC, Xcode 5, iOS 7.
Контекст вопроса
Причина, по которой мне нужно знать этот вопрос, заключается в том, что я хочу добавить ограничение topLayoutGuide к [[window rootViewController] view]
супер вид, где окна rootViewController
это навигационный контроллер
Хотя я не уверен, что лучше создать настраиваемый контроллер представления контейнера, содержащий контроллер навигации, чтобы мы могли добавить ограничение topLayoutGuide к представлению контроллера представления контейнера (теперь, очевидно, это суперпредставление представления контроллера навигации).
Причина, по которой мне нужно добавить это ограничение topLayoutGuide, заключается в том, что мой код кажется ошибочным, когда я показываю / скрываю панель навигации, меняя рамку представления контроллера навигации. Когда я устанавливаю фрейм представления контроллера навигации (также [[window rootViewController] view]), смещая координату y начала координат фрейма на 64 точки (высота 20 точек строки состояния плюс 44 точки панели навигации) вверх, представление контента контроллера навигации неожиданно переместился еще на 20 пунктов под панель навигации только в iOS 7. Это неожиданное поведение напоминает мне о проблеме, решаемой добавлением topLayoutGuide.
1 ответ
Когда вы назначаете корневому контроллеру окно, корневое представление контроллера становится подпредставлением окна. Так что да, окно является суперпредставлением window.rootViewController.view.
Однако не уверен, почему вы скрываете панель навигации, изменяя рамку контроллера навигации. Контроллер навигации имеет встроенное средство для этого: панель навигации показать / скрыть