在 Swift 5.2 和 iOS 13.4 中,根据您的需求,您可以使用以下示例之一将您的 VStack
对齐到顶部前导约束并具有全尺寸框架。
请注意,下面的代码片段都会产生相同的显示效果,但不能保证 VStack
的有效框架或出现在调试视图层次结构中的 View
元素数量。
1. 使用 frame(minWidth:idealWidth:maxWidth:minHeight:idealHeight:maxHeight:alignment:)
方法
最简单的方法是使用 frame(minWidth:idealWidth:maxWidth:minHeight:idealHeight:maxHeight:alignment:)
方法设置您的 VStack
的最大宽度和高度,并传递所需的对齐方式:
struct ContentView: View {
var body: some View {
VStack(alignment: .leading) {
Text("Title")
.font(.title)
Text("Content")
.font(.body)
}
.frame(
maxWidth: .infinity,
maxHeight: .infinity,
alignment: .topLeading
)
.background(Color.red)
}
}
2. 使用Spacer
强制对齐
您可以将VStack
嵌入全尺寸的HStack
中,并使用末尾和底部的Spacer
来强制使VStack
顶部对齐:
struct ContentView: View {
var body: some View {
HStack {
VStack(alignment: .leading) {
Text("Title")
.font(.title)
Text("Content")
.font(.body)
Spacer()
}
Spacer()
}
.frame(
maxWidth: .infinity,
maxHeight: .infinity
)
.background(Color.red)
}
}
3. 使用 ZStack
和全尺寸的背景 View
这个例子展示了如何将你的 VStack
嵌套在一个顶部靠左对齐的 ZStack
中。请注意使用 Color
视图设置最大宽度和高度:
struct ContentView: View {
var body: some View {
ZStack(alignment: .topLeading) {
Color.red
.frame(maxWidth: .infinity, maxHeight: .infinity)
VStack(alignment: .leading) {
Text("Title")
.font(.title)
Text("Content")
.font(.body)
}
}
}
}
4. 使用 GeometryReader
GeometryReader
的定义如下:
一个容器视图,其内容的函数基于它自己的大小和坐标空间。[...]该视图向其父布局返回一个灵活的首选大小。
以下代码片段展示了如何使用 GeometryReader
将你的 VStack
与顶部前导约束和全尺寸框架对齐:
struct ContentView : View {
var body: some View {
GeometryReader { geometryProxy in
VStack(alignment: .leading) {
Text("Title")
.font(.title)
Text("Content")
.font(.body)
}
.frame(
width: geometryProxy.size.width,
height: geometryProxy.size.height,
alignment: .topLeading
)
}
.background(Color.red)
}
}
5. 使用 overlay(_:alignment:)
方法
如果您想要将您的 VStack
与现有全尺寸的 View
顶部前导约束对齐,您可以使用 overlay(_:alignment:)
方法:
struct ContentView: View {
var body: some View {
Color.red
.frame(
maxWidth: .infinity,
maxHeight: .infinity
)
.overlay(
VStack(alignment: .leading) {
Text("Title")
.font(.title)
Text("Content")
.font(.body)
},
alignment: .topLeading
)
}
}
显示: