我正在尝试做一些在我脑海中非常直接的事情。
我想要一个 VStack 的子视图根据其内容动态更改其高度(下面示例中的 ProblematicView)。
它通常工作得很好,但在这种情况下, ProblematicView 包含一个 GeometryReader (以模拟多行的 HStack)。
但是, GeometryReader 贪婪地占用所有空间(如果您删除 GeometryReader 及其内容,则会发生预期的行为)。不幸的是,在父视图(下面示例中的 UmbrellaView)上,UmbrellaView VStack 将自身的 50% 分配给 ProblematicView,而不是显示视图内容的最小尺寸。
我花了几个小时玩 min/ideal/maxHeight 框架参数,但无济于事。
我想要实现的目标可行吗?
我在底部添加了图片以在视觉上澄清。
struct UmbrellaView: View {
var body: some View {
VStack(spacing: 0) {
ProblematicView()
.background(Color.blue)
ScrollView(.vertical) {
Group {
Text("A little bit about this").font(.system(size: 20))
Divider()
}
Group {
Text("some").font(.system(size: 20))
Divider()
}
Group {
Text("group").font(.system(size: 20)).padding(.bottom)
Divider()
}
Group {
Text("content").font(.system(size: 20))
}
}
}
}
}
struct ProblematicView: View {
var body: …
Run Code Online (Sandbox Code Playgroud) 我想在 VStack 之外使用 ScrollView,这样当 VStack 扩展超出屏幕尺寸时我的内容就可以滚动。现在我想GeometryReader
在 VStack 中使用,它会导致问题,我只能通过设置 GeometryReader 框架来解决,考虑到我使用阅读器来定义视图大小,这并没有真正帮助我。
这是没有 ScrollView 的代码,它工作得很好:
struct MyExampleView: View {
var body: some View {
VStack {
Text("Top Label")
.background(Color.red)
GeometryReader { reader in
Text("Custom Sized Label")
.frame(width: reader.size.width, height: reader.size.width * 0.5)
.background(Color.green)
}
Text("Bottom Label")
.background(Color.blue)
}
.background(Color.yellow)
}
}
Run Code Online (Sandbox Code Playgroud)
这会产生以下图像:
自定义尺寸的标签应为全宽,但高度为宽度的一半。现在,如果我将相同的代码包装在 ScrollView 中,就会发生这种情况:
不仅所有东西都变小了,而且自定义尺寸标签的高度也被忽略了。如果我设置 GeometryReader 的高度,我可以调整该行为,但我希望 GeometryReader 的大小与其内容一样大。我怎样才能实现这个目标?
谢谢
用非常基本的术语来说,在我的 Android 应用程序中,我有一个屏幕可以绘制圆圈,然后用曲线将它们连接起来。
我正在尝试在 SwiftUI 中重新创建它。
我发现这个问题看起来与我正在寻找的问题非常相似,但不幸的是答案非常简短,即使在阅读了大约 10 个不同的博客和 5 个视频之后,我仍然没有完全理解它。
我可以在 SwiftUI 中布局后获取“View”的位置吗?
所以基本逻辑是我以某种方式GeometryReader
用来获取我创建的每个元素的.midX
和.midY
坐标Circle
,然后Paths
在它们之间进行绘制。我唯一的问题是在创建圆之后获取这些坐标。
如何将路径添加到屏幕上,在ZStack
前面Circles
,路径作为一个自定义形状在后面?
更多信息:
在 Android 上,最终结果如下所示:
基本上我有一个Challenge
具有名称和一些详细文本的对象,我将它们像这样布局,以便它在视觉上代表用户的“旅程”。
所以我真正需要的是知道如何布置一些圆圈/图像(上面有文字),然后绘制连接它们的线。每个这样的挑战圈都需要可点击才能打开详细视图。