You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在fyne-io/fyne中实现List横向滚动?现有代码仅标签模板可滚动

Fyne List组件实现横向滚动的解决方案

当List组件的列表项文本过长时,使用container.NewHScroll包裹List后,实际仅列表项内的模板标签可滚动,整个List无法实现横向滚动。原代码问题在于:List的项模板使用了短文本Label,List会基于该模板的尺寸固定项的宽度,后续替换长文本时,项的宽度不会自动扩展,仅Label内部出现滚动,而List整体宽度未适配长文本,导致外层HScroll容器无效。

解决方案

  • 调整列表项模板:将Label的换行模式设置为fyne.TextWrapOff,让Label不自动换行,宽度随文本长度自适应
  • 确保List能根据项的实际宽度调整自身宽度,使外层HScroll在List宽度超出窗口时提供横向滚动

修改后的完整代码

package main

import (
    "fyne.io/fyne/v2"
    "fyne.io/fyne/v2/app"
    "fyne.io/fyne/v2/container"
    "fyne.io/fyne/v2/widget"
)

var data = []string{"long long long long long long long long long long string", "long long long long long long long long long long string"}

func main() {
    myApp := app.New()
    myWindow := myApp.NewWindow("List Widget")

    list := widget.NewList(
        func() int {
            return len(data)
        },
        func() fyne.CanvasObject {
            // 创建不换行的Label作为模板,宽度随文本自适应
            label := widget.NewLabel("template")
            label.Wrapping = fyne.TextWrapOff
            return label
        },
        func(i widget.ListItemID, o fyne.CanvasObject) {
            o.(*widget.Label).SetText(data[i])
        })

    myWindow.SetContent(container.NewHScroll(list))
    myWindow.ShowAndRun()
}

代码说明

  • label.Wrapping = fyne.TextWrapOff:关闭Label的自动换行,使其宽度随文本长度横向扩展
  • List会根据所有项的最大宽度调整自身整体宽度,当该宽度超出窗口范围时,外层的HScroll容器将触发横向滚动,实现整个List的横向滚动效果,与预期一致。

内容的提问来源于stack exchange,提问作者XanderCheung

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 09:33:16