Mit Swift 5.2 und iOS 13.4 können Sie je nach Bedarf eines der folgenden Beispiele verwenden, um Ihre Anforderungen an die wichtigsten VStack
Einschränkungen und einen Rahmen in voller Größe anzupassen.
Beachten Sie, dass die folgenden Codeausschnitte zu derselben Anzeige führen, jedoch weder den effektiven Frame VStack
noch die Anzahl der View
Elemente garantieren, die beim Debuggen der Ansichtshierarchie angezeigt werden.
1. frame(minWidth:idealWidth:maxWidth:minHeight:idealHeight:maxHeight:alignment:)
Methode verwenden
Der einfachste Ansatz besteht darin, den Rahmen Ihres VStack
mit maximaler Breite und Höhe einzustellen und die erforderliche Ausrichtung zu übergeben in 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)
}
}
Wenn das Festlegen des maximalen Rahmens mit einer bestimmten Ausrichtung für Ihr View
s ein häufiges Muster in Ihrer Codebasis ist, können Sie alternativ eine Erweiterungsmethode dafür erstellen 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. Verwenden Sie Spacer
s, um die Ausrichtung zu erzwingen
Sie können Ihr VStack
Inneres in voller Größe einbetten HStack
und Trailing und Bottom Spacer
s verwenden, um Ihre VStack
Ausrichtung nach oben zu erzwingen :
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. Verwenden Sie einen ZStack
Hintergrund in voller GrößeView
Dieses Beispiel zeigt, wie Sie Ihr VStack
Inneres einbetten ZStack
, das eine Ausrichtung nach oben aufweist. Beachten Sie, wie in der Color
Ansicht die maximale Breite und Höhe festgelegt wird:
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. Verwenden von GeometryReader
GeometryReader
hat die folgende Erklärung :
Eine Containeransicht, die ihren Inhalt als Funktion ihrer eigenen Größe und ihres Koordinatenraums definiert. [...] Diese Ansicht gibt eine flexible bevorzugte Größe für das übergeordnete Layout zurück.
Das folgende Code-Snippet zeigt, wie Sie es GeometryReader
an den wichtigsten VStack
Einschränkungen und einem Rahmen in voller Größe ausrichten können :
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:)
Methode verwenden
Wenn Sie Ihre VStack
mit den wichtigsten Einschränkungen über einer vorhandenen Größe in voller Größe ausrichten möchten View
, können Sie folgende overlay(_:alignment:)
Methode verwenden:
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
)
}
}
Anzeige: