如何在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
相关产品推荐
相关产品推荐

