【发布时间】:2021-06-11 19:32:56
【问题描述】:
我正在 SwiftUI 中创建一个包含多个部分的表单。每个部分包含几个文本字段,每个字段都有一个标签。
我想将文本字段的前缘相互对齐,并与视图的中心对齐。
我可以使用以下方法在一个部分中对齐文本字段的前沿:
extension HorizontalAlignment {
private struct LeadingEdgeAlignment: AlignmentID {
/// A custom alignment for leading edges.
static func defaultValue(in context: ViewDimensions) -> CGFloat {
context[.leading]
}
}
/// A guide for aligning leading edges.
static let leadingEdge = HorizontalAlignment(LeadingEdgeAlignment.self)
}
struct ContentView: View {
var body: some View {
Form {
Section(header: Text("Section One")) {
VStack(alignment: .leadingEdge) {
HStack {
Text("Primary")
TextField("", text: .constant(""))
.frame(minWidth: nil, idealWidth: nil, maxWidth: 75, minHeight: nil, maxHeight: nil)
.alignmentGuide(.leadingEdge) { $0[HorizontalAlignment.leading] }
.textFieldStyle(RoundedBorderTextFieldStyle())
}
HStack {
Text("Secondary")
TextField("", text: .constant(""))
.frame(minWidth: nil, idealWidth: nil, maxWidth: 75, minHeight: nil, maxHeight: nil)
.alignmentGuide(.leadingEdge) { $0[HorizontalAlignment.leading] }
.textFieldStyle(RoundedBorderTextFieldStyle())
}
}
}
Section(header: Text("Section Two")) {
VStack(alignment: .leadingEdge) {
HStack {
Text("Milk")
TextField("", text: .constant(""))
.frame(minWidth: nil, idealWidth: nil, maxWidth: 75, minHeight: nil, maxHeight: nil)
.alignmentGuide(.leadingEdge) { $0[HorizontalAlignment.leading] }
.textFieldStyle(RoundedBorderTextFieldStyle())
}
HStack {
Text("Cheesecake")
TextField("", text: .constant(""))
.frame(minWidth: nil, idealWidth: nil, maxWidth: 75, minHeight: nil, maxHeight: nil)
.alignmentGuide(.leadingEdge) { $0[HorizontalAlignment.leading] }
.textFieldStyle(RoundedBorderTextFieldStyle())
}
}
}
}
}
}
但是,到目前为止,我创建跨节对齐指南的所有尝试都失败了。
如何跨表单部分对齐视图?
【问题讨论】: