2

Как можно поддерживать навигационную панель как в 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 у меня есть большой зазор под панелью навигации.

Я могу исключить использование навигационного контроллера, но это кажется немного тяжелым в этой ситуации, и я бы хотел использовать это как последнее средство.

ответ

2

Я нашел решение этого.

Вы должны установить barTintColor в прошивке 7, который также, кажется, цвет основной строки состояния, а также настройки панели навигации, чтобы не быть прозрачными, как это:

mainController.navigationBar.barTintColor = [SRPRTabletHelpers customUserColor]; 
mainController.navigationBar.translucent = NO; 

Непрозрачностью была ключ, в то время как настройка цвета устанавливает не только обычную навигационную панель, но и цвет под полосой состояния.

мне нужно изменить мой containerView верхний край, чтобы быть полной высоты моего зрения, содержащейся в навигационном контроллере, теперь, когда он не является прозрачным, и она работает так же, как на iOS6 и прошивкой 7.

0

Хотя вы упомянули, что уже решили это, ваш метод, похоже, требует много ручного кода и , если проверяет. В iOS 7 UI Transition guide, in the Supporting iOS 6 chapter упоминается другой способ: сначала создайте свой интерфейс для iOS7, как вы это сделали, с вашим видом, проходящим под панелью навигации.

Затем в конструкторе интерфейса откройте инспектор размеров для элементов пользовательского интерфейса и измените дельта iOS 6/7. Эти значения применяются, когда раскадровка не запускается на iOS 7. Например, в вашем случае вы можете выбрать все ваши визуальные элементы, а затем установить Y-дельту в -44, которая является стандартной высотой навигации. Это сделает UI до на iOS6, компенсируя тот факт, что представление не попадает под панель навигации.

Смежные вопросы