Кодовое имя один: портрет / пейзаж и строка состояния (и показать назад) - PullRequest
1 голос
/ 21 июня 2020

Мое приложение пытается поддерживать портретный и альбомный режимы. В портретном режиме он должен отображать строку состояния, но не в альбомном режиме (на iOS). Это достигается за счет использования 1) постоянной темы landscapeTitleUiidBool = true и 2) переопределения StatusBarLandscape, как предлагается здесь: Codename One iOS Statusbar в альбомной ориентации . Я создал тестовый проект с двумя формами и следующими логами c:

public void start() {
    if (current != null) {
        current.show();
        return;
    }
    Form home = new Form("Home", BoxLayout.y());
    Button ok = new Button("OK");
    ok.addActionListener(e -> {
        showOKForm(home);
    });
    home.add(ok);
    home.show();
}

// precondition: Toolbar.setGlobalToolbar(true) set in init(Object)
private void showOKForm(Form home) {
    Form f = new Form("OK", BoxLayout.y());
    f.add(new Label("Thanks"));
    f.getToolbar().setBackCommand("", e -> home.showBack());
    f.show();
}

Это работает, как ожидалось, но не всегда! Тестирование приложения на устройстве iPhone X быстро дает go ошибку, если мы немного поиграем с навигацией по форме и поворотом устройства. Возникают все ситуации: обе формы в портретном режиме отображают строку состояния правильно и неправильно (то есть заголовок и команда возврата в верхней части строки состояния), и обе формы в альбомном режиме не отображают строку состояния правильно (т.е. нет строки состояния) и неправильно (т.е. пробел строки состояния над заголовком и команда возврата). См. Прикрепленное изображение с частичными скриншотами (показаны только соответствующие верхние (левые) части). введите описание изображения здесь Scenar ios для достижения этого не воспроизводятся: это зависит от обстоятельств. Проблемы возникают и в симуляторе. Похоже, что иногда используется неправильный UIID: StatusBar vs StatusBarLandscape. (Изменить: в симуляторе он показывает правильные UIID, но размеры неверны, т.е. «перевернуты».)

В моем реальном приложении (то есть не в тестовом проекте) у меня есть воспроизводимые ситуации, когда go неправильно , особенно в этом сценарии: 1) открыть форму, 2) повернуть устройство, 3) go вернуться к предыдущей форме. Я попытался переопределить showBack (), чтобы переделать макет или повторно проверить, но ничего не помогает.

Вопрос: верна ли приведенная выше реализация и как решить эту проблему?

...