Jest to znany problem w ostatecznej wersji, która wykazuje się w dwóch przypadkach:
- Prezentując drugi kontroler modalne (stronicowania lub pojedynczy) nad kontrolerem modalnej istniejący stronicowania
- Podczas prezentacji menu za pomocą Force Touch nad kontrolerem modulacji stronicowania
Zostało to omówione na forach programistów Apple, a jedynym rozwiązaniem, o którym słyszałem, jest to, którego używam w mojej aplikacji. Niestety, nie ma prostego kodu do rozwiązania, który rozwiązuje problem, więc opiszę podejście (które uważam za niechlujne, ale wykonalne).
Najpierw należy śledzić prezentacje kontrolera interfejsu. Mam na to ramkę, ale być może będziesz musiał przetasować własny. Gdy kontroler interfejsu potomnego ma swoje polecenie woluminu wywoływane dwa razy z rzędu (innymi słowy, bez wywoływania innego kontrolera interfejsu potomnego), można założyć, że modal został przedstawiony/odrzucony na nim.
Przedstawiciel/nadrzędny kontroler może następnie poinformować wszystkie dzieci, że wystąpił błąd w menu modalnym, a te kontrolery podrzędne mogą pokazać zastępczy pasek stanu za pomocą własnego przycisku Anuluj/Zamknij. Przy odrobinie pracy można odtworzyć wersję standardowego paska stanu o jakości pikseli z identycznym zachowaniem.
Ostatnim krokiem jest wykrycie, kiedy aplikacja Zegarek jest zawieszona, a następnie wznowienie. W takim przypadku willActivate jest również wywoływany dwa razy. Jeśli nie poradzisz sobie z tą sytuacją, w końcu odkryjesz pasek stanu wymiany i będziesz mieć jednocześnie dwa na ekranie. To nie jest świetny scenariusz.
Uzyskanie tego prawa jest bardzo trudne, ale działa. Chciałbym mieć prostą próbkę kodu, którą można wstrzyknąć.
Aktualizacja: I pchnął niektóre z moich kodu obejście GitHub:https://github.com/mikeswanson/JBInterfaceController
Tylko uwaga, że ten został naprawiony w Watch OS 1.0.1. –