Проблема с панелью навигации Xcode 9 после перехода из левого бокового меню в iOS 11, а не в iOS 10.3 и ниже

После обновления с Xcode 8 до Xcode 9 я заметил это очень странное поведение на панели навигации только на устройствах под управлением iOS 11.

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

Я разместил видео здесь: https://youtu.be/mgjlbkMi-N8

Кажется, это ошибка компиляции на Xcode 9.

Пробовали также на реальном устройстве iPad Pro с iOS 11. Тот же код, скомпилированный с помощью Xcode 8.3.3, работает должным образом, а скомпилированный с помощью Xcode 9 выявляет проблему.

Я разместил здесь код игровой площадки: https://github.com/shadowsheep1/xcode9navigationissue.

Уже есть обходной путь: установите презентацию в полноэкранном режиме.

Но это не имеет значения, это не ожидаемая операция.

После того, как панель навигации сломана, она ломается для каждого навигационного контроллера в приложении.

Есть идеи?

ИЗМЕНИТЬ:

Связь с разработчиками Apple, 23 января 2018 г., 23:13

Планов по решению этой проблемы нет по следующим причинам:

Вы создаете отдельную презентацию, что приводит к размещению нескольких панелей навигации в иерархии представлений. Видимая панель навигации не та, где происходят нажатия, поэтому отображается ошибка. Не знаю, почему этого не произошло на iOS 10, но там тоже была неверная конфигурация.

Мы бы порекомендовали вам использовать правильный контейнер контроллера представления для реализации этого меню, а не то, что кажется сделанным (IS_SlideMenu_View размещается непосредственно в окне).


person shadowsheep    schedule 29.09.2017    source источник
comment
Любая модальная презентация с навигационным контроллером имеет ту же проблему.   -  person akaDuality    schedule 02.10.2017
comment
@akaDuality Я разместил сообщение об ошибке здесь bugreport.apple.com и до сих пор компилировал с помощью Xcode 8.3. 3   -  person shadowsheep    schedule 02.10.2017
comment
@akaDuality Вы представляете свои представления модально программно или путем перехода из Interface Builder?   -  person shadowsheep    schedule 02.10.2017
comment
программно   -  person akaDuality    schedule 02.10.2017


Ответы (1)


У меня такая же проблема с обычным UIModalTransitionStyleCoverVertical.

Я решил это, установив UIModalPresentationOverFullScreen или UIModalPresentationOverCurrentContext.

Возможно, это также поможет вам.

Пример навигации, представленной модально:

if (@available(iOS 11.0, *)) {
   navController.modalPresentationStyle = UIModalPresentationOverFullScreen;
}
person akaDuality    schedule 02.10.2017
comment
Это обходной путь, который я предложил в вопросе, но я не могу понять, является ли это правильным выбором, потому что Apple изменила это поведение, или это настоящая ошибка при программном представлении модальных представлений с представлением по умолчанию. Я предполагаю, что это последний сценарий. В любом случае, если вы установите OverFullScreen, у вас будет другой внешний вид пользовательского интерфейса, потому что подчеркивание не уничтожается. - person shadowsheep; 02.10.2017
comment
Ой, не увидела во время чтения. Вы правы, поведение очень расстраивает - person akaDuality; 02.10.2017