Как сохранить 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 рисуют только в пределах выделенного им прямоугольника, поэтому вы этого не замечаете. Но представления списков со списками, достаточно длинными для прокрутки, начнут рисовать за пределами этого прямоугольника, поэтому вам нужно включить отсечение, если вы не хотите этого видеть.