За допомогою Swift 5.2 та iOS 13.4, відповідно до ваших потреб, ви можете скористатися одним із наведених нижче прикладів, щоб узгодити свої VStack
верхні обмеження та рамку в повному розмірі.
Зверніть увагу, що фрагменти коду нижче всіх призводять до одного і того ж відображення, але не гарантують ефективного кадру VStack
ні кількості View
елементів, які можуть з'явитися під час налагодження ієрархії подання.
1. Використання frame(minWidth:idealWidth:maxWidth:minHeight:idealHeight:maxHeight:alignment:)
методу
Найпростіший підхід - це встановити рамку вашого VStack
з максимальною шириною та висотою, а також передати необхідне вирівнювання в frame(minWidth:idealWidth:maxWidth:minHeight:idealHeight:maxHeight:alignment:)
:
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)
}
}
Як альтернативу, якщо встановлення максимального кадру з конкретним вирівнюванням для вашого View
s є загальним шаблоном у вашій основі коду, ви можете створити View
для нього метод розширення :
extension View {
func fullSize(alignment: Alignment = .center) -> some View {
self.frame(
maxWidth: .infinity,
maxHeight: .infinity,
alignment: alignment
)
}
}
struct ContentView : View {
var body: some View {
VStack(alignment: .leading) {
Text("Title")
.font(.title)
Text("Content")
.font(.body)
}
.fullSize(alignment: .topLeading)
.background(Color.red)
}
}
2. Використання Spacer
s для примусового вирівнювання
Ви можете вставити VStack
всередину повний розмір HStack
і скористатися кінцевим та нижнім Spacer
s, щоб змусити 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. Використання a 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
)
}
}
Дисплей: