如何使 ScrollView 仅垂直剪辑?
How to make ScrollView clip only vertically?
ScrollView
将其所有内容裁剪到其大小。是否可以让它只对顶部和底部起作用,但允许 children 在右侧和左侧超出 parent 的框架?
我只能想象一个原因,为什么你不将 ScrollView
的宽度设置为更高的值(contentItem
的宽度)。
要做到这一点,同时不限制 ScrollView
的宽度,您可以使用一个简单的技巧:
Item {
id: limitedWidthItemToAnchorTo
width: 200 // the width the ScrollView was supposed to have
height: 400
ScrollView {
width: contentItem.width + __verticalScrollBar.width// Don't limit the width.
height: 400 // Limit only the height.
horizontalScrollBarPolicy: Qt.ScrollBarAlwaysOff // You don't need them.
contentItem: Rectangle {
width: 700 // This will set the ScrollViews width.
height: 600 // The height will be clipped by the ScrollView.
// You can scroll though.
gradient: Gradient {
GradientStop { position: 0; color: 'red' }
GradientStop { position: 1; color: 'blue' }
}
border.width: 10
}
}
}
你将它包裹在 Item
中,锚定到这个,你会很好。
或者你可以使用面具,但这会......更复杂。
本身不可能仅水平或垂直裁剪,因为裁剪是使用 Item
的边界框完成的。
如果您只想在一个方向上滚动,则只需将内容项的 width/height 设置为 ScrollView 的 width/height,使用 属性 绑定(因为ScrollView 中的项目重新设置为 ScrollView.contentItem)。下面的例子只会垂直滚动。我已经测试过了,如果你需要确认它是否真的有效。
Item {
ScrollView {
id: scrollview1
anchors.fill: parent
anchors.margins: 20
clip: true
ColumnLayout {
width: scrollview1.width
}
}
}
ScrollView
将其所有内容裁剪到其大小。是否可以让它只对顶部和底部起作用,但允许 children 在右侧和左侧超出 parent 的框架?
我只能想象一个原因,为什么你不将 ScrollView
的宽度设置为更高的值(contentItem
的宽度)。
要做到这一点,同时不限制 ScrollView
的宽度,您可以使用一个简单的技巧:
Item {
id: limitedWidthItemToAnchorTo
width: 200 // the width the ScrollView was supposed to have
height: 400
ScrollView {
width: contentItem.width + __verticalScrollBar.width// Don't limit the width.
height: 400 // Limit only the height.
horizontalScrollBarPolicy: Qt.ScrollBarAlwaysOff // You don't need them.
contentItem: Rectangle {
width: 700 // This will set the ScrollViews width.
height: 600 // The height will be clipped by the ScrollView.
// You can scroll though.
gradient: Gradient {
GradientStop { position: 0; color: 'red' }
GradientStop { position: 1; color: 'blue' }
}
border.width: 10
}
}
}
你将它包裹在 Item
中,锚定到这个,你会很好。
或者你可以使用面具,但这会......更复杂。
本身不可能仅水平或垂直裁剪,因为裁剪是使用 Item
的边界框完成的。
如果您只想在一个方向上滚动,则只需将内容项的 width/height 设置为 ScrollView 的 width/height,使用 属性 绑定(因为ScrollView 中的项目重新设置为 ScrollView.contentItem)。下面的例子只会垂直滚动。我已经测试过了,如果你需要确认它是否真的有效。
Item {
ScrollView {
id: scrollview1
anchors.fill: parent
anchors.margins: 20
clip: true
ColumnLayout {
width: scrollview1.width
}
}
}