HarmonyOS 鸿蒙Next 写的一个滚动页面,已经超出屏幕范围为什么不会滚动啊
HarmonyOS 鸿蒙Next 写的一个滚动页面,已经超出屏幕范围为什么不会滚动啊
写的一个滚动页面,已经超出屏幕范围为什么不会滚动啊
3 回复
你设置滚动组件的显示区域大小了吗?
更多关于HarmonyOS 鸿蒙Next 写的一个滚动页面,已经超出屏幕范围为什么不会滚动啊的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
参考以下demo:
[@Entry](/user/Entry)
[@Component](/user/Component)
struct ScrollExample {
private panOption: PanGestureOptions = new PanGestureOptions({ direction: PanDirection.Left | PanDirection.Right })
[@Provide](/user/Provide) offsetX: number | undefined = undefined;
[@Builder](/user/Builder)
topArea() {
tableRow().margin({right: 100})
}
build() {
Column() {
// 顶部
this.topArea()
// 主体
MainArea().margin({bottom:100})
}
.backgroundColor(Color.Orange)
.gesture(
// 用于触发拖动手势事件,滑动的最小距离为5vp时拖动手势识别成功。
PanGesture(this.panOption).onActionStart((event?: GestureEvent) => {
this.offsetX = event?.offsetX
console.info('gesture11: PanGesture start' + event?.offsetX)
})
)
}
}
[@Component](/user/Component)
struct MainArea {
private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
build() {
List() {
ForEach(this.arr, (item: number) => {
ListItem() {
tableRow()
}.margin({right: 100})
}, (item: number) => item.toString())
}.sticky(StickyStyle.Header)
}
}
// table row
[@Component](/user/Component)
struct tableRow {
build() {
Row() {
Text('111111').fontSize(20).width(100).height(100)
ScrollComponent()
}.width('100%')
}
}
[@Component](/user/Component)
struct ScrollComponent {
scroller: Scroller = new Scroller()
[@Consume](/user/Consume) [@Watch](/user/Watch)('onCountUpdated') offsetX: number;
//监听滑动距离
onCountUpdated() {
if (this.offsetX) {
this.scroller.scrollTo({
xOffset: this.scroller.currentOffset()?.xOffset - this.offsetX * 50, //滑动距离可根据实际情况设置
yOffset: 0,
animation: { duration: 1000 }
})
}
}
build() {
Scroll(this.scroller) {
Row() {
Text('111111').fontSize(20).width(100).height(100)
Text('111113').fontSize(20).width(100).height(100)
Text('111114').fontSize(20).width(100).height(100)
Text('111115').fontSize(20).width(100).height(100)
Text('111116').fontSize(20).width(100).height(100)
Text('111117').fontSize(20).width(100).height(100)
Text('111118').fontSize(20).width(100).height(100)
Text('111119').fontSize(20).width(100).height(100)
Text('1111110').fontSize(20).width(100).height(100)
Text('1111111').fontSize(20).width(100).height(100)
}
}
.scrollable(ScrollDirection.Horizontal) // 滚动方向横向
.scrollBar(BarState.Off) // 滚动条常驻显示
.edgeEffect(EdgeEffect.None)
// 禁止scroll滚动
.enabled(false)
}
}
HarmonyOS 鸿蒙Next 滚动页面不滚动的问题可能由以下几个原因造成:
-
Scroll组件未正确设置:确保你使用了
Scroll
组件(如List
、NestedScroll
等)来包裹需要滚动的内容。检查Scroll
组件的属性,如scroll_direction
(滚动方向)和scroll_behavior
(滚动行为)是否配置正确。 -
内容尺寸未超出容器:滚动发生的条件是内容尺寸大于容器尺寸。检查滚动内容(如
Div
、Text
等)的高度或宽度是否确实超出了Scroll
组件的对应尺寸。 -
布局约束问题:检查布局约束(如
Flex
、Grid
等)是否限制了内容的扩展。确保内容可以自由地增长到超出屏幕范围。 -
触摸事件被拦截:检查是否有其他组件或布局拦截了触摸事件,导致滚动事件无法传递到
Scroll
组件。 -
动画或状态影响:如果使用了动画或状态管理,确保它们没有干扰滚动行为。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。