带有路径元素的 SwiftUI ScrollView 未显示全部
SwiftUI ScrollView with Path element not showing all
此示例代码说明了我的问题:
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")
}
}
}
我需要一个视图来显示一些图表,我需要分配给图表视图的 space 大小来缩放轴。
这就是我将它放在 GeometryReader 中的原因。
当我在需要滚动的设备上 运行 这段代码时(例如 iPhone 8),我无法滚动查看整个“图表”。
看起来好像“图形视图”以某种方式绘制在 ScrollView 之外。
在路径视图上设置框架没有帮助。
感谢您提供的任何帮助。
1) 你应该使用 Shape,因为那样你会得到一个矩形,你可以在其中 "paint"
2)你必须给它一个框架,因为苹果不知道你的形状有多大(见我最后附加的矩形)
3) 如果你不给它一个框架,你的形状会得到一个 "default" 高度,就像矩形一样
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")
}
}
}
此示例代码说明了我的问题:
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")
}
}
}
我需要一个视图来显示一些图表,我需要分配给图表视图的 space 大小来缩放轴。 这就是我将它放在 GeometryReader 中的原因。
当我在需要滚动的设备上 运行 这段代码时(例如 iPhone 8),我无法滚动查看整个“图表”。
看起来好像“图形视图”以某种方式绘制在 ScrollView 之外。
在路径视图上设置框架没有帮助。
感谢您提供的任何帮助。
1) 你应该使用 Shape,因为那样你会得到一个矩形,你可以在其中 "paint"
2)你必须给它一个框架,因为苹果不知道你的形状有多大(见我最后附加的矩形)
3) 如果你不给它一个框架,你的形状会得到一个 "default" 高度,就像矩形一样
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")
}
}
}