Измените (или удалите) черную полосу внизу iOS в приложении QML - PullRequest
0 голосов
/ 08 мая 2020

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

Я попытался добавить раскадровку экрана запуска, как предложено в iOS 9 Xcode 7 - приложение отображается с черными полосами сверху и внизу . Кажется, это не имеет никакого значения.

Я также попытался установить для моего элемента root Window свойство visibility: Window.FullScreen. Это удалило черное пространство в нижней части экрана, но также скрыло строку состояния iOS вверху, чего я НЕ хочу делать.

Window {
    id: root
    visible: true
    width: 450
    height: 800
    color: "black"

    Page {
        id: mainPageId
        anchors.fill: parent
        header: /* ... header ... */


        footer: TabBar {
            id: tabBarid
            width: parent.width
            contentHeight: 80
            background: Rectangle {
                color: "lightgray"
            }

            TabButton {
             /* ... tab button stuff ... */
            }

            TabButton {
             /* ... tab button ... */
            }
        }

        SwipeView {
            id: mainPageSwipeViewId
            anchors.fill: parent
            /* ... swipe to hold the main content of the page ... */
        }
    }
}

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

Black bar screen shot

Версия Qt: 5.13

Версия XCode: 11.4 (11E146)

iOS Версия: 13.4.1

1 Ответ

2 голосов
/ 09 мая 2020

Хорошо, это довольно сложно сделать правильно. Приготовьтесь .....

  1. Как и вы, у вас должна быть раскадровка экрана запуска, и это хорошо.
  2. Я использую этот параметр на моем Window для запуска полный экран:
    flags: Qt.Window | Qt.MaximizeUsingFullscreenGeometryHint

Вероятно, тот же эффект, что и ваш параметр видимости выше.

Теперь, если вы действительно хотите сделать это правильно, вам понадобится код C ++.
QVariantMap System::getSafeAreaMargins(QQuickWindow *window)
{
    QPlatformWindow *platformWindow = static_cast<QPlatformWindow *>(window->handle());
    QMargins margins = platformWindow->safeAreaMargins();
    QVariantMap map;
    map["top"] = margins.top();
    map["right"] = margins.right();
    map["bottom"] = margins.bottom();
    map["left"] = margins.left();
    return map;
}

Обратите внимание, что в вашем файле .pro вам нужно добавить:

QT += gui-private

и включите этот заголовок:

#include <QtGui/qpa/qplatformwindow.h>

Вам нужно поместить это в класс, который вы предоставляете QML через класс C ++. Это вернет вам «Поля безопасной зоны» для текущего устройства. Дополнительная информация об этом topi c здесь:

https://developer.apple.com/documentation/uikit/uiview/positioning_content_relative_to_the_safe_area?language=objc

Теперь вы должны использовать эту информацию для настройки макета каждого из ваших экранов.

Суть в том, что в полноэкранном режиме ваше окно простирается до верхней части экрана. и к физической нижней части экрана. И это за строкой состояния и за домашней панелью внизу. Если, например, ваш фон белый, тогда ваша белая строка состояния будет выглядеть так, как будто она исчезла, хотя на самом деле она есть, но не различима.

getSafeAreaMargins выше возвращает информацию, которая сообщает вам, какие поля безопасной области вокруг вашего контент в зависимости от типа устройства. Вы используете их, чтобы убедиться, что ваш фоновый контент запускается за строкой состояния и домашней строкой, когда это имеет смысл, а ваш контент переднего плана никогда не работает. Вы добиваетесь sh этого, добавляя эту информацию к каждому макету страницы по мере необходимости (с помощью настроек полей и отступов или объектов-разделителей).

Обратите внимание: эти значения меняются при запуске приложения и изменении ориентации. ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...