iOS 7 переопределяет модальное представление CurrentContext

У меня довольно стандартная иерархия представлений, в основном с UITabBarController, содержащей несколько UINavigationController.

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

Я хочу, чтобы он отображался с UIModalPresentationCurrentContext, поэтому я устанавливаю его так:

[newNavCon setModalPresentationStyle:UIModalPresentationCurrentContext];

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

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

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

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

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

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

EDIT: Чтобы уточнить, вот иерархия представлений, с которой я работаю:

  • UIViewController (как контейнер, полноэкранный режим)
  • UITabBarController (not fullscreen, as controlled by the container)
    • definesPresentationContext
  • UINavigationController (as tab root, presents the modal window)
    • definesPresentationContext
  • UINavigationController (presented modally by the above UIViewController)
    • modalPresentationStyle = UIModalPresentationCurrentContext
  • UIViewController

person ABeard89    schedule 30.01.2017    source источник
comment
Я использую собственный подкласс для своих navCons, но когда я меняю его на стандартный UINavigationController, это все равно происходит.   -  person ABeard89    schedule 30.01.2017
comment
Я добавил символическую точку останова, чтобы увидеть, когда она будет изменена, и ее определенно нет в коде, который я написал. Точка останова остановилась внутри UIKit где-то во время операции presentViewController. К сожалению, я не мог понять этого. Я не видел ничего, с чем я мог бы работать.   -  person ABeard89    schedule 30.01.2017
comment
Спасибо. Это то, что у меня было. Это настолько странно, что не хочет представлять текущий контекст. В документации сказано, что можно, и насколько я могу судить, я все делаю правильно. Я решил, что моя единственная надежда состояла в том, чтобы узнать, помнит ли кто-нибудь здесь, в SO, какую-нибудь недокументированную ошибку или причуду с поведением iOS7. И я не удивлен, что вы этого не сделаете. У меня едва есть один для тестирования, и это раздражает, потому что я должен использовать XCode7 только для тестирования...   -  person ABeard89    schedule 30.01.2017
comment
О, еще кое-что. Даже если я удалю модальный navCon и просто представлю внутренний viewCon, он все равно изменится на полноэкранный. Это просто очень странно... Он не хочет ничего представлять в текущем контексте. Что-то должно быть не так с этим. Либо я, либо UIKit iOS7 не могут справиться с этой иерархией представлений.   -  person ABeard89    schedule 30.01.2017


Ответы (1)


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

person matt    schedule 30.01.2017
comment
Что ж, это, безусловно, объясняет, почему он продолжает принудительно открываться в полноэкранном режиме! И да, я тестирую на iPhone. - person ABeard89; 31.01.2017
comment
Но чтобы было совершенно ясно, если что-то представлено модально в ios7 на iPhone, то это может быть только полноэкранный режим? - person ABeard89; 31.01.2017