SwiftUI ScrollView与Path元素未全部显示

时间:2020-04-01 09:55:38

标签: swiftui scrollview drawing

此示例代码说明了我的问题:

import SwiftUI

struct ContentView: View {
    var body: some View {
        ScrollView {
            VStack {
                subviewone()
                subviewone()
                subviewone()
                subviewone()
                subviewone()
                subviewone()
                graph()
            }.padding(.all)
            
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}


struct graph: View {
    var body: some View {
        GeometryReader { geo in
            Path { path in
                path.move(to: CGPoint(x: 0, y: 0))
                path.addLine(to: CGPoint(x: geo.size.width, y: 0))
                path.addLine(to: CGPoint(x: geo.size.width, y: geo.size.width))
            }.fill(Color.red)
            
        }
    }
}

struct subviewone: View {
    var body: some View {
        VStack {
            Text("testtest")
            Text("testtest")
            Text("testtest")
            Text("testtest")
            Text("testtest")
            Text("testtest")
            Text("testtest")
        }
        
    }
}

我需要一个视图来显示一些图形,并且我需要为该图形视图分配的空间大小来缩放轴。 这就是为什么我将其放在GeometryReader中的原因。

当我在需要滚动的设备(例如iPhone 8)上运行此代码时,无法滚动以查看整个“图形”。

似乎“图形视图”以某种方式绘制在ScrollView之外。

在“路径”视图上设置框架没有帮助。

感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:2)

1)您应该使用Shape,因为这样您就可以在其中进行“绘画”

2)您必须给它加上一个框架,因为Apple不知道您的形状有多大(请参阅我在结尾处附加的矩形)

3)如果您不给它一个框架,则矩形会得到一个默认的高度

struct ContentView: View {
    var body: some View {
        ScrollView {
            VStack {
                subviewone()
                subviewone()
                subviewone()
                subviewone()
                subviewone()
                subviewone()
                graph()
                    .fill(Color.red)
                    .frame(height:400) // or:  .aspectRatio(contentMode: .fill)
                Rectangle()
                Rectangle()
                Rectangle()


            }.padding(.all)
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}


struct graph: Shape {
    func path(in rect: CGRect) -> Path {
        Path { path in
            path.move(to: CGPoint(x: 0, y: 0))
            path.addLine(to: CGPoint(x: rect.size.width, y: 0))
            path.addLine(to: CGPoint(x: rect.size.width, y: rect.size.width))
        }
    }
}

struct subviewone: View {
    var body: some View {
        VStack {
            Text("testtest")
            Text("testtest")
            Text("testtest")
            Text("testtest")
            Text("testtest")
            Text("testtest")
            Text("testtest")
        }

    }
}
相关问题