ด้วย 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
เพื่อบังคับให้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
)
}
}
แสดง: