Apple Watch: строка состояния не отображается после отображения модального экрана на основе навигации по страницам.

Когда я представляю модальный экран со страницы на основе навигации по страницам, весь экран сдвигается, а строка состояния больше не видна.
Вот gif проблемы:

enter image description here

Я использую версию xCode 6.2.
Этого не произошло в xCode 6.2 Beta 4..
Я не уверен, что это проблема симулятора, или это действительно произойдет на реальном устройстве.

Кто-нибудь имеет такую ​​же проблему? Есть ли обходной путь?

Я сообщил об ошибке для apple (20109240) и был отмечен как дубликат (19862945), и он все еще открыт.
Спасибо заранее

Ответ 1

Это известная проблема в финальной версии, которая проявляется в двух случаях:

  • При представлении второго модального контроллера (пейджингового или одиночного) поверх существующего модема подкачки
  • При представлении меню с использованием параметра "Принудительное касание" над модульным контроллером пейджинга

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

Во-первых, вам нужно отслеживать презентации интерфейса контроллера. У меня есть основа для этого, но вам, возможно, придется сворачивать самостоятельно. Когда у контроллера дочернего интерфейса есть его willActivate, вызываемый два раза подряд (другими словами, без вызова другого контроллера дочернего интерфейса), вы можете предположить, что модаль был представлен/отклонен поверх него.

Ваш презентационный/родительский контроллер может затем проинформировать всех детей о том, что произошла ошибка модального меню, и эти дочерние контроллеры могут отображать строку состояния с собственной кнопкой "Отмена/Закрытие". При некоторой работе вы можете воссоздать идеальную версию стандартной строки состояния с одинаковым поведением.

Последний поворот - это обнаружить, когда приложение Watch приостановлено, а затем возобновляется. В этом случае willActivate также вызывается дважды. Если вы не справитесь с этой ситуацией, вы перестанете отображать строку состояния замены и одновременно будете иметь два на экране. Не отличный сценарий.

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

Обновление: я переместил часть моего обходного кода в GitHub: https://github.com/mikeswanson/JBInterfaceController