GeometryReader影响滚动视图

时间:2020-10-15 07:34:46

标签: swift xcode swiftui

添加标准Scrollview时,我可以滚动到列表的末尾而没有任何问题,这是在按钮上添加了GeometryReader之后,滚动列表不会滚动到列表的末尾,而是停在列表的顶部我的按钮。 geometryReader不能缩放到子对象的大小,如何在不为GeometryReader指定硬编码帧大小的情况下更改此大小?我使用GeometryReader稍后通过 geo.frame(in:.global).maxY

来标识按钮的顶部与屏幕上的位置相对应
VERBOSE: Parameter name 'LogFolder' value '\\myComputerName\Log'
VERBOSE: Parameter name 'ComputerName' value 'PC1', 'myComputerName'

当检查高度并尝试将GeometryReader的框架设置为等于按钮的高度时,该按钮也会给我0作为值。当我尝试使用 geo.frame.width 读取按钮的宽度时,它为我提供了正确的值。

struct scroll: View {
    
    private var gridItemLayout = [GridItem(.flexible()), GridItem(.flexible())]
    
    var body: some View {
        ScrollView {
            VStack {
                LazyVGrid(columns: gridItemLayout) {
                    Circle()
                        .scaledToFill()
                        .foregroundColor(.red)
                    Circle()
                        .scaledToFill()
                        .foregroundColor(.green)
                    Circle()
                        .scaledToFill()
                        .foregroundColor(.blue)
                    Circle()
                        .scaledToFill()
                        .foregroundColor(.yellow)
                }
                GeometryReader { geo in
                    Button(action: {
                        
                    }) {
                        Text("Adjust time")
                    }
                    .cornerRadius(18.0)
                    .padding(.top, 5)
                }
                //.frame(width: .infinity, height: 50)
                
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您可以通过将GeometryReader放在按钮的背景中来阅读,例如

Button(action: {
    
}) {
    Text("Adjust time")
}
.cornerRadius(18.0)
.padding(.top, 5)
.background(GeometryReader { geo in
   // geo.frame(in: .global).maxY      // << global position of button
})

您甚至可以将其存储在视图首选项中以进入状态,例如https://stackoverflow.com/a/62466397/12299030