Tôi đã cố gắng hiểu điều này như các câu trả lời khác ở đây đề cập đến Text.multilineTextAlignment(_:)
/ VStack(alignment:)
/ frame(width:alignment:)
nhưng mỗi giải pháp giải quyết một vấn đề cụ thể. Cuối cùng, nó phụ thuộc vào yêu cầu giao diện người dùng và sự kết hợp của những điều này.
VStack(alignment:)
Ở alignment
đây là dành cho các quan điểm bên trong tương ứng với nhau.
Vì vậy, việc chỉ định .leading
sẽ liên kết tất cả các khung nhìn bên trong để phần đầu của chúng được liên kết với nhau.
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
Trong frame(width:alignment:)
hoặc frame(maxWidth:alignment:)
, alignment
là cho nội dung trong chiều rộng nhất định.
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))
Các chế độ xem bên trong được căn hàng đầu tương ứng với nhau nhưng bản thân các chế độ xem được căn chỉnh theo sau tương ứng với VStack
.
.multilineTextAlignment
Điều này chỉ định căn chỉnh của văn bản bên trong và có thể được nhìn thấy tốt nhất khi có nhiều dòng nếu không có dòng được xác định frame(width:alignment)
, chiều rộng được tự động điều chỉnh và bị ảnh hưởng bởi alignment
s mặc định .
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))
Kiểm tra với các kết hợp:
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))