路径元素未显示全部的SwiftUI ScrollView

路径元素未显示全部的SwiftUI ScrollView,swiftui,scrollview,drawing,Swiftui,Scrollview,Drawing,此示例代码说明了我的问题: import SwiftUI struct ContentView: View { var body: some View { ScrollView { VStack { subviewone() subviewone() subviewone() subviewone()

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

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)您应该使用Shape,因为这样您就可以得到一个可以“绘制”的矩形

2) 你必须给它一个框架,因为苹果不知道你的形状有多大(见我在末尾附加的矩形)

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")
        }

    }
}
1) 你应该使用Shape,因为这样你就得到了一个可以“画画”的矩形

2) 你必须给它一个框架,因为苹果不知道你的形状有多大(见我在末尾附加的矩形)

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")
        }

    }
}

谢谢你,克里斯!您的解决方案非常有效。只要我按照您的建议设置.aspectRatio(contentMode:.fill),它甚至可以使用Path。不需要这个形状。谢谢你,克里斯!您的解决方案非常有效。只要我按照您的建议设置.aspectRatio(contentMode:.fill),它甚至可以使用Path。不需要形状。