Как сохранить UbuntuListView между его границами?

У меня есть UbuntuListView в приложении QML для Ubuntu Touch. Над ним есть еще один компонент - TextField,

Начальная позиция списка выглядит хорошо. Также, если список меньше доступной области, проблем с прокруткой нет.

Однако, если список достаточно велик, при прокрутке, а также после завершения прокрутки список перекрывает компонент выше:

Main.qml

import QtQuick 2.4
import QtQuick.Layouts 1.1

import Ubuntu.Components 1.2

MainView {

    width: units.gu(40)
    height: units.gu(30)

    Page {
        ColumnLayout {
            spacing: units.gu(1)
            anchors {
                margins: units.gu(2)
                fill: parent
            }

            TextField {
                id: textInput
                Layout.fillWidth: true;
                placeholderText: i18n.tr("Add an item")
            }

            MyList {
                anchors {
                    left: parent.left
                    right: parent.right
                }

                Layout.fillHeight: true
            }
        }
    }
}

MyList.qml

import QtQuick 2.4
import Ubuntu.Components 1.2
import Ubuntu.Components.ListItems 1.0

Item {

    ListModel {
        id: listModel
        ListElement {itemName: 'one'}
        ListElement {itemName: 'two'}
        ListElement {itemName: 'three'}
        ListElement {itemName: 'four'}
    }

    UbuntuListView {
        anchors.fill: parent

        model: listModel

        delegate: ListItem {
            id: listItem

            divider.visible: false
            Label {
                id: label
                text: itemName

                verticalAlignment: Text.AlignVCenter
                height: parent.height
            }
        }
    }
}

Я пытался изменить z свойство на компоненты, но это не помогло.

Я неправильно использую API? Или это ошибка в Ubuntu SDK? (и если так, возможен ли обходной путь?)

1 ответ

Решение

Добавлять clip: true к UbuntuListView,

По умолчанию для объектов QML установлено значение false, что позволяет им рисовать вне выделенного прямоугольника. Я предполагаю, что это оптимизация, поскольку она позволяет рендереру избегать вычисления отсечения для каждого элемента. Большинство объектов QML рисуют только в пределах выделенного им прямоугольника, поэтому вы этого не замечаете. Но представления списков со списками, достаточно длинными для прокрутки, начнут рисовать за пределами этого прямоугольника, поэтому вам нужно включить отсечение, если вы не хотите этого видеть.

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