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

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

введите описание изображения здесь

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

У кого-нибудь есть такая же проблема? Есть ли обходной путь?

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

1 ответ

Решение

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

  1. При представлении второго модального контроллера (пейджинговый или одиночный) поверх существующего пейджингового модального контроллера
  2. При представлении меню с помощью Force Touch поверх модального контроллера

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

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

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

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

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

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

Другие вопросы по тегам