За допомогою 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)
}
}
Як альтернативу, якщо встановлення максимального кадру з конкретним вирівнюванням для вашого Views є загальним шаблоном у вашій основі коду, ви можете створити 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. Використання Spacers для примусового вирівнювання
Ви можете вставити VStackвсередину повний розмір HStackі скористатися кінцевим та нижнім Spacers, щоб змусити 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
)
}
}
Дисплей:
