SwiftUI:水平滚动视图我能够上下拖动图像

时间:2019-12-30 14:16:47

标签: view scrollview swiftui

我正在swiftui中创建我的水平滚动视图,但是无论何时尝试使用它,我都可以上下拉动滚动视图中的子视图,当它第一次加载时,顶部,中间和底部也有空白edgesignore(.all)无法正常工作。请参见下面的代码和图像。我该如何摆脱这个空白,而又不允许将顶部的蓝色视图拉起来?

var body: some View {
    GeometryReader { geometry in
        ZStack{

            VStack {

                ZStack{

                    ScrollView (.horizontal, showsIndicators: true) {
                        HStack(spacing: 0){
                            Group{
                                Color(.blue)
                                Color(.red)
                                Color(.green)
                            }.frame(width: geometry.size.width, height: geometry.size.height * 0.52)

                        }

                    }//end of scroll\view
                        .frame(width: geometry.size.width, height: geometry.size.height * 0.52)


                } .frame(width: geometry.size.width, height: geometry.size.height * 0.52)
                    .edgesIgnoringSafeArea(.all)

                ZStack{
                    Color(.orange)

                }//end of second ZStack

                    .frame(width: geometry.size.width, height: geometry.size.height * 0.48)
            }
        }.edgesIgnoringSafeArea(.all)

    }
}

White spaces on the screen

1 个答案:

答案 0 :(得分:1)

您必须考虑以下因素来重构代码:

  • 只需将VStack Spacing设置为0,视图将不再在其垂直轴上滚动。您可以通过将两个框架的高度都增加到100%以上来进行检查,它将再次开始滚动

  • 重构ZStack并根据上下堆栈设置EdgeIgnoringSafeArea。请记住,在SwiftUI中检查ViewModifiers的正确顺序很重要。

    var body:某些视图{

    GeometryReader {中的几何

    VStack(spacing:0) {
        ZStack {
            Color(.orange)
            .edgesIgnoringSafeArea(.top)
    
            ScrollView (.horizontal, showsIndicators: true) {
                HStack(spacing:0){
                    Group{
                        Color(.blue)
                        Color(.red)
                        Color(.green)
                    }
                    .frame(width: geometry.size.width, height: geometry.size.height * 0.52)
                }
            }
        }
        ZStack{
            Color(.orange)
                .edgesIgnoringSafeArea(.bottom)
                .frame(width: geometry.size.width, height: geometry.size.height * 0.48)
    
        }
    }
    

    }

}

它适用于XCode 11.3。