在 OpenHarmony(ArkUI) 中,实现**列表吸顶(Sticky Header)**通常有以下几种方式,取决于你使用的是 List 组件 还是 Scroll 容器。
List + ListItemGroupOpenHarmony 的 List 原生支持分组吸顶。
List() {
ListItemGroup({ header: this.Header('分组1') }) {
ListItem() { Text(' item 1') }
ListItem() { Text(' item 2') }
}
ListItemGroup({ header: this.Header('分组2') }) {
ListItem() { Text(' item 3') }
ListItem() { Text(' item 4') }
}
}
.width('100%')
.height('100%')
@Builder
Header(title: string) {
Text(title)
.fontSize(18)
.fontWeight(FontWeight.Bold)
.backgroundColor('#f1f1f1')
.width('100%')
.height(50)
}
✅ 效果:
滚动时,当前分组的 Header 会吸顶,直到下一个分组顶上来。
如果你用的是 Scroll 而不是 List,可以手动实现吸顶。
@State offsetY: number = 0
Scroll() {
Column() {
Text('吸顶标题')
.position({ y: this.offsetY })
.backgroundColor('#fff')
.width('100%')
ForEach([1,2,3,4,5], (item) => {
Text('内容 ' + item)
.height(100)
})
}
}
.onScroll((x, y) => {
this.offsetY = Math.max(0, y)
})
⚠️ 这种方式不够优雅,适合简单场景。
如果是 顶部 Tab 吸顶 + 列表滚动:
Column() {
Tabs() {
TabContent() {
List() { ... }
}
}
.barPosition(BarPosition.Start)
}
Tabs 默认吸顶,适合新闻、商城类页面。
ListItem 不能吸顶| 场景 | 推荐方案 |
|---|---|
| 分组列表 | ListItemGroup ✅ |
| 单个标题吸顶 | Scroll + position |
| Tab + 列表 | Tabs |
| 复杂布局 | 自定义 Scroll 监听 |
如果你能告诉我:
我可以给你更精确的代码。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。