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 VStackEinschrä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 VStacknoch die Anzahl der ViewElemente 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 VStackmit 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 Views 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 Spacers, um die Ausrichtung zu erzwingen
Sie können Ihr VStackInneres in voller Größe einbetten HStackund Trailing und Bottom Spacers verwenden, um Ihre VStackAusrichtung 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 ZStackHintergrund in voller GrößeView
Dieses Beispiel zeigt, wie Sie Ihr VStackInneres einbetten ZStack, das eine Ausrichtung nach oben aufweist. Beachten Sie, wie in der ColorAnsicht 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
GeometryReaderhat 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 GeometryReaderan den wichtigsten VStackEinschrä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 VStackmit 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:
