HarmonyOS 鸿蒙Next 写的一个滚动页面,已经超出屏幕范围为什么不会滚动啊

发布于 1周前 作者 caililin 来自 鸿蒙OS

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 滚动页面不滚动的问题可能由以下几个原因造成:

  1. Scroll组件未正确设置:确保你使用了Scroll组件(如ListNestedScroll等)来包裹需要滚动的内容。检查Scroll组件的属性,如scroll_direction(滚动方向)和scroll_behavior(滚动行为)是否配置正确。

  2. 内容尺寸未超出容器:滚动发生的条件是内容尺寸大于容器尺寸。检查滚动内容(如DivText等)的高度或宽度是否确实超出了Scroll组件的对应尺寸。

  3. 布局约束问题:检查布局约束(如FlexGrid等)是否限制了内容的扩展。确保内容可以自由地增长到超出屏幕范围。

  4. 触摸事件被拦截:检查是否有其他组件或布局拦截了触摸事件,导致滚动事件无法传递到Scroll组件。

  5. 动画或状态影响:如果使用了动画或状态管理,确保它们没有干扰滚动行为。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。

回到顶部