2017-01-30 21 views
0

У меня довольно стандартная иерархия представлений, в основном с UITabBarController, содержащая несколько UINavigationController.iOS 7 отменяет текущую текстовую презентацию CurrentContext

Я создаю новый UINavigationController и представляю его модально с одного из вкладок.

Я хочу, чтобы показать с UIModalPresentationCurrentContext, поэтому я устанавливаю это так:

[newNavCon setModalPresentationStyle:UIModalPresentationCurrentContext]; 

И потом, я представляю это так:

[oldNavCon presentViewController:newNavCon animated:YES completion:nil]; 

Но когда он получает представлены, это полный экран, а не текущий контекст, который я установил.

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

Вещь, которая меня действительно смущает, заключается в том, что это происходит только на iOS7. Он работает точно так, как ожидалось, на iOS 8-10.

Почему это происходит? Есть ли какая-то определенная причуда, о которой я не знаю в iOS7? Почему стиль презентации будет переопределен?

EDIT: Чтобы уточнить, вот иерархия зрения я работаю с:

  • UIViewController (как контейнер, полноэкранный режим)
  • UITabBarController (не во всем экране, как управляемый контейнером)
    • definesPresentationContext
  • UINavigationController (как вкладки корня, представляет окно модальное)
    • definesPresentationContext
  • UINavigationController (представлено модально приведенной выше UIViewController)
    • modalPresentationStyle = UIModalPresentationCurrentContext
  • UIViewController
+0

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

+0

Я добавил символическую точку останова, чтобы увидеть, когда она изменится, и это определенно не в коде, который я написал. Точка останова остановилась внутри UIKit где-то во время операции 'presentViewController'. К сожалению, я не мог понять. Я не видел ничего, с чем мог бы работать. – ABeard89

+0

Спасибо. Это так, как я. Это так странно, что он не хочет представлять в качестве текущего контекста. В документации говорится, что это возможно, и насколько я могу судить, я делаю все правильно. Я полагал, что моя единственная надежда состояла в том, чтобы увидеть, кто-нибудь здесь, в SO, помнил некоторые недокументированные ошибки или причуды с поведением iOS7. И я не удивлен, что вы этого не делаете. У меня едва есть тест, и это раздражает, потому что я должен использовать XCode7, чтобы проверить его ... – ABeard89

ответ

0

Я предполагаю, что вы тестируете устройство или симулятор iPhone. В iOS 7 и ранее UIModalPresentationCurrentContext был iPad-only.

+0

Ну, это, конечно же, объяснит, почему он все время становится вынужденным во весь экран! И да, я тестирую iPhone. – ABeard89

+0

Это помогло бы, если бы в документации упоминался этот маленький лакомый кусочек ... – ABeard89

+0

Но, чтобы быть совершенно ясным, если что-то представлено в ios7 на iPhone, то это может быть только полный экран? – ABeard89