swiftui - ScrollView 与 Geometry Reader 结合使用时无法正确滚动(反弹)
问题描述
我已经在这里查看了答案(ScrollView Don't Scroll with Geometry Reader as Child),我猜这很相似,但我无法弄清楚。
我的目标是显示相同大小(二次)的图像。
这是我的观点:
struct MyGeoView: View {
let icons = ["bed.double.fill","tram.fill","tv.music.note.fill","hare.fill", "person", "clock", "plus", "trash", "home", "arrow", "pencil", "scribble", "folder", "folder.circle", "trash.circle", "paperplane"]
var body: some View {
GeometryReader{ geo in
ScrollView{
GeometryReader{ geo in
LazyVGrid(columns: Array(repeating: GridItem(.flexible()), count: 3), spacing: 3 ){
ForEach(icons, id: \.self){ post in
Image(systemName: post)
.frame(width: geo.size.width/3, height: geo.size.width/3)
.background(Color.pink)
.foregroundColor(.white)
}
}
}
}
}
}
}
不幸的是,它没有正确滚动(反弹)并且总是回到顶部。你有什么想法吗?
谢谢!
解决方案
你只需要一个GeometryReader
,外部的。
这是更正的代码。使用 Xcode 12.1 / iOS 14.1 测试
var body: some View {
GeometryReader{ geo in
ScrollView{
LazyVGrid(columns: Array(repeating: GridItem(.flexible()), count: 3), spacing: 3 ){
ForEach(icons, id: \.self){ post in
Image(systemName: post)
.frame(width: geo.size.width/3, height: geo.size.width/3)
.background(Color.pink)
.foregroundColor(.white)
}
}
}
}
}
推荐阅读
- angular - 如何在角度 6 中集成数据表
- symfony - 通过 FOSUserBundle 使用两个实体时按用户名或电子邮件记录
- laravel - 如何在 Laravel 5.6 中下载印地语的 pdf
- ibm-mobilefirst - 无法从远程机器连接到 IBM Mobile first 7.1 服务器
- android - 与相对布局一起使用时,导航抽屉不起作用
- scala - SBT - 如何根据外部源向 application.conf 文件添加/修改值
- python - Pytest:在超类中运行所有测试
- javascript - 当元素具有相同的类时如何分配数据?
- amazon-web-services - 使用带有提到的特定版本和别名的 Travis CI 的 AWS Lambda 函数部署
- knockout.js - 淘汰赛中的数据绑定不适用于多个属性