Как можно поддерживать навигационную панель как в iOS 6, так и в iOS 7 с помощью UIContainerView через раскадровку?Создание контроллера навигатора одинаково в iOS 6 и iOS 7
Я обновляю приложение iOS 6 для iOS 7, но хочу продолжать поддерживать iOS 6. У меня есть главный вид верхнего уровня, встроенный в UINavigationController. В представлении в контроллере навигации есть контейнер. Я использую раскадровку, чтобы выложить представление.
На iOS 7 навигационный контроллер использует весь экран, и я настроил его, чтобы разместить содержимое контейнера под панелью навигации. В iOS 6 содержимое представления не попадает под панель навигации, поэтому у меня пробел ниже навигационной панели.
Обычно я просто сбросил происхождение нарушающего вида на iOS6 (в ViewDidLoad или somesuch) и продолжаю свой путь. Однако, поскольку мой контент находится в UIContainerView, я не могу изменить кадр после его загрузки. (Я пробовал это в prepareForSegue: при загрузке UIContainerView. Я открыт для того, чтобы сделать это неправильно? Heh)
Ближайший я нашел, используя следующий код под iOS 7, чтобы сделать навигационную панель непрозрачной и сохранить содержимое из-под него, а затем используя все пространство для моего UIContainerView.
// tell the view to not extend below this nav bar
if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
self.edgesForExtendedLayout = UIRectEdgeNone;
Это решение работает, но имеет побочный эффект, показывающий строку состояния как черный (так как это более или менее «пустой» под строкой состояния). В качестве альтернативы, если я поместил верхний край представления контейнера под строку состояния, на iOS 6 у меня есть большой зазор под панелью навигации.
Я могу исключить использование навигационного контроллера, но это кажется немного тяжелым в этой ситуации, и я бы хотел использовать это как последнее средство.