Отключить смещение окна при появлении клавиатуры для приложения ios

Отключить смещение окна при появлении клавиатуры для приложения ios

Я хотел бы отключить смещение окна при появлении клавиатуры для приложения ios. Для приложения для Android это делается черезAndroidManifest.xml :

<activity ... android:windowSoftInputMode="adjustResize">

Когда появляется клавиатура, компоненты не сдвигаются со своих мест. Можно ли получить такое поведение для ios?

# qt
Источник
Codelisting
за 0 против

Нашел решение здесь, в комментариях: iOS Сделайте прокрутку окна необязательной для элементов https://bugreports.qt.io/browse/QTBUG-80790 (этот обходной путь хорошо работает для меня)

========================

Адриан Эдди добавил комментарий - 11 апр '20 01:44 - отредактировано

Я нашел обходной путь, который работает с QML. Идея состоит в том, чтобы установить фильтр событий на QQuickItem и прослушивать QEvent :: InputMethodQuery с помощью Qt :: InputMethodQuery :: ImCursorRectangle. Затем мы устанавливаем его значение на пустой QRectF, и Qt больше не будет прокручивать представление, чтобы отобразить это текстовое поле.

в C ++ подготовьте класс и предоставьте его QML:

class Api : public QObject {
Q_OBJECT
....
public:
    Q_INVOKABLE void setupImEventFilter(QQuickItem *item) {
        static thread_local ImFixer imf;
        item->installEventFilter(&imf);
    }
}

// где-то в main ():

   view.rootContext()->setContextProperty("api", new Api());

Нам также понадобится фактический фильтр событий:

class ImFixer :
    public QObject {
        Q_OBJECT
    protected:
        bool eventFilter(QObject *obj, QEvent *event) override {
            if (event->type() == QEvent::InputMethodQuery) {
                QInputMethodQueryEvent *imEvt = static_cast<QInputMethodQueryEvent *>(event);
                if (imEvt->queries() == Qt::InputMethodQuery::ImCursorRectangle) {
                    imEvt->setValue(Qt::InputMethodQuery::ImCursorRectangle, QRectF());
                    return true;
                }
            }
            return QObject::eventFilter(obj, event);
        }
    };

Наконец, в QML добавьте:

TextField {
    id: tf;
...
    Component.onCompleted: api.setupImEventFilter(tf);
}
Codelisting
Популярные категории
На заметку программисту