SwiftUI ScrollView的Path元素未全部显示

问题描述 投票:0回答:1

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

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之外。

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

感谢您提供的任何帮助。

swiftui scrollview drawing
1个回答
0
投票

检查此:

struct graph: View {

    @State var geo : GeometryProxy?

    var body: some View {

        Path { path in
            path.move(to: CGPoint(x: 0, y: 0))
            path.addLine(to: CGPoint(x: geo != nil ? geo!.size.width : 0, y: 0))
            path.addLine(to: CGPoint(x: geo != nil ? geo!.size.width : 0, y: geo != nil ? geo!.size.width : 0))
        }
        .fill(Color.red)
            .frame(width: self.geo?.size.height)
            .background(GeometryReader { geometry -> Color in
                OperationQueue.main.addOperation {
                    self.geo = geometry
                }
                return Color.clear
        })

    }
}
© www.soinside.com 2019 - 2024. All rights reserved.