HarmonyOS6 ArkTS List 跳转准确
文章目录一、功能概述二、官方核心知识点1. 为什么普通 scrollTo 跳转不准2. childrenMainSize3. ListScroller.scrollTo三、完整可运行代码四、代码核心逻辑解析1. 声明 ChildrenMainSize2. 配置不规则子项高度3. List 绑定 childrenMainSize4. 执行精准滚动跳转总结一、功能概述在 List 组件中当列表项高度/宽度不一致时直接使用scrollTo进行滚动跳转会出现位置偏移、定位不准确的问题。HarmonyOS6 提供childrenMainSize属性用于预先告知 List 所有子项的尺寸让系统能够精准计算滚动偏移量实现100% 准确跳转。核心问题列表项高度不一致 → 滚动跳转错位核心解决方案childrenMainSizeListScroller核心目标滚动定位零误差、精准跳转二、官方核心知识点1. 为什么普通 scrollTo 跳转不准List 默认假设所有子项大小相同子项高度不一致时 → 系统计算偏移量错误最终导致跳转位置不对2. childrenMainSize用于告诉 List 组件每个子项的真实主轴尺寸让系统能够正确计算总高度正确计算每个 item 的位置实现scrollTo精准跳转3. ListScroller.scrollTo官方提供的滚动跳转 APIthis.scroller.scrollTo({xOffset:0,yOffset:目标偏移量})只有配合childrenMainSize才能精准工作。三、完整可运行代码// xxx.ets import { ListDataSource } from ./ListDataSource; Entry Component struct ListExample { private arr: ListDataSource new ListDataSource([]); private scroller: ListScroller new ListScroller(); State listSpace: number 10; State listChildrenSize: ChildrenMainSize new ChildrenMainSize(100); aboutToAppear(){ // 初始化数据源。 let list: number[] []; for (let i 0; i 10; i) { list.push(i); } this.arr new ListDataSource(list); // 前5个item的主轴大小不是默认大小100因此需要通过ChildrenMainSize通知List。 this.listChildrenSize.splice(0, 5, [300, 300, 300, 300, 300]); } build() { Column() { List({ space: this.listSpace, initialIndex: 4, scroller: this.scroller }) { LazyForEach(this.arr, (item: number) { ListItem() { Text(item- item) .height( item 5 ? 300 : this.listChildrenSize.childDefaultSize) .width(90%) .fontSize(16) .textAlign(TextAlign.Center) .borderRadius(10) .backgroundColor(0xFFFFFF) } }, (item: string) item) } .backgroundColor(Color.Gray) .layoutWeight(1) .scrollBar(BarState.On) .childrenMainSize(this.listChildrenSize) .alignListItem(ListItemAlign.Center) Row({ space: 18 }) { Button() { Text(item size 50) }.onClick((){ this.listChildrenSize.childDefaultSize 50; }).height(50%).width(30%).backgroundColor(0xADD8E6) Button() { Text(item size - 50) }.onClick((){ if (this.listChildrenSize.childDefaultSize 0) { return; } this.listChildrenSize.childDefaultSize - 50; }).height(50%).width(30%).backgroundColor(0xADD8E6) Button() { Text(scrollTo (0, 310)) }.onClick((){ // 310: 跳转到item 1顶部与List顶部平齐的位置。 // 如果不设置childrenMainSizeitem高度不一致时scrollTo会不准确。 this.scroller.scrollTo({ xOffset: 0, yOffset: 310 }) }).height(50%).width(30%).backgroundColor(0xADD8E6) }.height(20%) } } }运行效果如图当点击50当再次点击-50发现高度变低当点击scrollTo页面滚动到顶部四、代码核心逻辑解析1. 声明 ChildrenMainSizeStatelistChildrenSize:ChildrenMainSizenewChildrenMainSize(100);默认子项高度100用于系统计算列表布局2. 配置不规则子项高度this.listChildrenSize.splice(0,5,[300,300,300,300,300]);告诉 List前 5 个 item 高度 300其余 item 高度 1003. List 绑定 childrenMainSize.childrenMainSize(this.listChildrenSize)这是实现精准跳转的关键4. 执行精准滚动跳转this.scroller.scrollTo({xOffset:0,yOffset:310})跳转目标item 1顶部与 List 顶部对齐偏移量 310 第一个 item 高度300 spacing10总结子项高度不一致时必须使用childrenMainSizechildrenMainSize.splice用于更新不规则子项尺寸ListScroller.scrollTo才能精准定位动态修改子项高度时只需修改childDefaultSize即可自动刷新所有尺寸必须与真实 ListItem 高度保持一致childrenMainSize是HarmonyOS6 官方解决 List 不规则子项精准跳转的标准方案。只要你的列表项高度不一致就必须使用ChildrenMainSize配置子项尺寸List.childrenMainSize()绑定ListScroller.scrollTo实现精准跳转如果这篇文章对你有帮助欢迎点赞、收藏、关注你的支持是持续创作的动力
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2450895.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!