พยายามที่จะเข้าใจสิ่งนี้ด้วยตัวเองเนื่องจากคำตอบอื่น ๆ ที่นี่กล่าวถึงText.multilineTextAlignment(_:)
/ VStack(alignment:)
/ frame(width:alignment:)
แต่แต่ละวิธีแก้ปัญหาเฉพาะ ในที่สุดก็ขึ้นอยู่กับความต้องการ UI และการรวมกันของสิ่งเหล่านี้
VStack(alignment:)
alignment
นี่คือมุมมองด้านในที่เกี่ยวข้องกับอีกคนหนึ่ง
ดังนั้นการระบุ.leading
จะเชื่อมโยงมุมมองภายในทั้งหมดให้มีแกนนำสอดคล้องกัน
VStack(alignment: .leading, spacing: 6) {
Text("Lorem ipsum dolor")
.background(Color.gray.opacity(0.2))
Text("sit amet")
.background(Color.gray.opacity(0.2))
}
.background(Color.gray.opacity(0.1))
.frame
ในframe(width:alignment:)
หรือframe(maxWidth:alignment:)
ที่alignment
สำหรับเนื้อหาภายในความกว้างที่กำหนด
VStack(alignment: .leading, spacing: 6) {
Text("Lorem ipsum dolor")
.background(Color.gray.opacity(0.2))
Text("sit amet")
.background(Color.gray.opacity(0.2))
}
.frame(width: 380, alignment: .trailing)
.background(Color.gray.opacity(0.1))
มุมมองชุดชั้นในจะนำชิดที่เกี่ยวข้องกับอีกคนหนึ่ง VStack
แต่มุมมองของตัวเองจะถูกลากชิดที่เกี่ยวข้องกับ
.multilineTextAlignment
สิ่งนี้ระบุการจัดแนวของข้อความภายในและสามารถมองเห็นได้ดีที่สุดเมื่อมีหลายบรรทัดเป็นอย่างอื่นโดยไม่มีการกำหนดframe(width:alignment)
ความกว้างจะถูกปรับโดยอัตโนมัติและได้รับผลกระทบจากค่าเริ่มต้นalignment
s
VStack(alignment: .trailing, spacing: 6) {
Text("0. automatic frame\n+ view at parent's specified alignment\n+ multilineTA not set by default at leading")
.background(Color.gray.opacity(0.2))
Text("1. automatic frame\n+ view at parent's specified alignment\n+ multilineTA set to center")
.multilineTextAlignment(.center)
.background(Color.gray.opacity(0.2))
Text("2. automatic frame\n+ view at parent's specified alignment\n+ multilineTA set to trailing")
.multilineTextAlignment(.trailing)
.background(Color.gray.opacity(0.2))
}
.frame(width: 380, alignment: .trailing)
.background(Color.gray.opacity(0.1))
การทดสอบด้วยชุดค่าผสม:
VStack(alignment: .trailing, spacing: 6) {
Text("1. automatic frame, at parent's alignment")
.background(Color.gray.opacity(0.2))
Text("2. given full width & leading alignment\n+ multilineTA at default leading")
.frame(maxWidth: .infinity, alignment: .leading)
.background(Color.gray.opacity(0.2))
Text("3. given full width & center alignment\n+ multilineTA at default leading")
.frame(maxWidth: .infinity, alignment: .center)
.background(Color.gray.opacity(0.2))
Text("4. given full width & center alignment\n+ multilineTA set to center")
.multilineTextAlignment(.center)
.frame(maxWidth: .infinity, alignment: .center)
.background(Color.gray.opacity(0.2))
Text("5. given full width & center alignment\n+ multilineTA set to trailing")
.multilineTextAlignment(.trailing)
.frame(maxWidth: .infinity, alignment: .center)
.background(Color.gray.opacity(0.2))
Text("6. given full width but no alignment\n+ multilineTA at default leading\n+ leading is based on content, looks odd sometimes as seen here")
.frame(maxWidth: .infinity)
.background(Color.gray.opacity(0.2))
}
.frame(width: 380)
.background(Color.gray.opacity(0.1))