Go Fyne:容器内绘制对象无法触发滚动行为的技术咨询
Fyne滚动容器不显示滚动条的解决方法
问题原因
你当前的代码中,用container.NewWithoutLayout创建的内容容器,虽然手动调用了Resize,但Fyne的滚动容器是依据内容的**最小尺寸(MinSize)**来判断是否需要启用滚动的。NewWithoutLayout创建的容器默认不会自动设置MinSize,滚动容器无法识别内容实际大小,所以不会显示滚动条。
修复方案
有两种简单的修复方式:
方式1:使用固定布局容器(推荐)
用container.NewFixed替代container.NewWithoutLayout,它会自动将容器尺寸设为内容的最小尺寸,滚动容器能正确识别:
package main import ( "image/color" "fyne.io/fyne/v2" "fyne.io/fyne/v2/app" "fyne.io/fyne/v2/canvas" "fyne.io/fyne/v2/container" ) func main() { myApp := app.New() w := myApp.NewWindow("Rectangle") rect := canvas.NewRectangle(color.White) rect.StrokeColor = color.Opaque rect.Resize(fyne.NewSize(150, 150)) rect2 := canvas.NewRectangle(color.Gray{}) rect2.Resize(fyne.NewSize(150, 150)) rect2.Move(fyne.NewPos(150, 150)) line := canvas.NewLine(color.RGBA{255, 0, 0, 255}) line.StrokeWidth = 5 line.Position1 = fyne.NewPos(0, 0) line.Position2 = fyne.NewPos(300, 300) // 使用NewFixed创建固定尺寸容器,自动设置MinSize content := container.NewFixed(fyne.NewSize(300, 300), rect2, line, rect) // 垂直滚动容器 scrollContainer := container.NewVScroll(content) w.SetContent(scrollContainer) w.ShowAndRun() }
方式2:手动设置内容容器的MinSize
如果坚持用NewWithoutLayout,需要手动给内容容器设置最小尺寸,让滚动容器能识别:
// ... 其他代码不变 content := container.NewWithoutLayout(rect2, line, rect) content.Resize(fyne.NewSize(300, 300)) // 手动设置最小尺寸 content.SetMinSize(fyne.NewSize(300, 300)) // ... 后续代码不变
验证效果
修改后,调整窗口大小使其小于300x300,滚动条就会自动出现,拖动即可查看超出窗口的内容。
内容的提问来源于stack exchange,提问作者DaHerb
相关产品推荐
相关产品推荐

