SwiftUI ScrollView垂直和水平滚动

时间:2020-06-04 18:21:22

标签: ios swift swiftui-list swiftui

我有一个滚动视图,我想基于@State更改滚动的方向。

struct HomeScreen: View {
    @State var isVertical: Boolean = true

    var body: some View {
    VStack{
        Button(action: {
                self.isVertical.toggle()
            }) {
                Text("press me")
        }.padding()
        ScrollView(self.isVertical == true ? .horizontal : .vertical, showsIndicators: true){
                    if(self.isVertical){
                        HStack {
                            Text("a")
                            Text("b")
                            Text("c")
                            Text("d")

                            Spacer()
                        }
                    } else {
                        VStack{
                            Text("a")
                            Text("b")
                            Text("c")
                            Text("d")
                        }
                    }
                }.padding()
    }
}

在此屏幕上的第一次显示时,滚动视图是垂直的,一旦我单击按钮并反转状态,滚动视图就会发生变化并发疯,同时在垂直和水平方向上滚动。我究竟做错了什么?我希望基于您正在垂直或水平滚动的内容。非常感谢

1 个答案:

答案 0 :(得分:0)

这是固定的变体(还对isVertical进行了正确的处理以符合含义)

通过Xcode 11.4 / iOS 13.4测试

struct HomeScreen: View {
    @State var isVertical: Bool = true

    var body: some View {
        VStack{
            Button(action: {
                    self.isVertical.toggle()
                }) {
                    Text("press me")
            }.padding()
            ScrollView(self.isVertical ? .vertical : .horizontal, showsIndicators: true){
                        if(self.isVertical){
                            VStack {
                                Text("a")
                                Text("b")
                                Text("c")
                                Text("d")

                                Spacer()
                            }
                        } else {
                            HStack{
                                Text("a")
                                Text("b")
                                Text("c")
                                Text("d")
                            }
                        }
                    }.id(isVertical)       // << main part !!
                     .padding()
        }
    }
}