我们如何控制 SwiftUI 表单中的自动分隔线?

Cur*_*rge 2 swift swiftui ios16

我很好奇,有没有一种方法可以控制(或理解) swiftui 在项目之间放置的自动分隔线?

下面是一些显示奇怪行为的代码(在 iOS 模拟器上):

struct FormSeparator: View {
    @State private var passwd = ""
    var body: some View {
        Form {
            ZStack(alignment: .trailing) {
                TextField("password", text:$passwd)
                Text("8 chars min")
                    .font(.caption)
                    .foregroundColor(.secondary)
            }
            TextField("confirm", text:$passwd)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

结果如下:

奇怪的分隔线的例子

Text这似乎与我堆叠在密码字段顶部的内容有关。如果我将其文本更改为,Image(systemName: "lock")那么一切都会按您的预期进行:

普通分隔线示例

请注意,我什至不明白为什么在这种情况下它没有一直延伸到整个表单。大概这是故意的,有人见过关于这种情况的官方信息吗?我们知道如何控制它吗?

Nir*_*v D 5

在 iOS 16 中,列表/表单行分隔符会自动插入并与文本对齐。在 iOS 16 中,我们获得了两个新的对齐方式listRowSeparatorLeadinglistRowSeparatorTrailing,可以与 一起使用alignmentGuide(_:computeValue:)

ZStack(alignment: .trailing) {
    TextField("password", text:$passwd)
    Text("8 chars min")
        .font(.caption)
        .foregroundColor(.secondary)
}
.alignmentGuide(.listRowSeparatorLeading) { viewDimensions in
    return 0
}
Run Code Online (Sandbox Code Playgroud)