在SwiftUI视图中,在TextField之后使用多个SecureFields时的奇怪行为
在视图中跟踪文本字段时,尝试使用多个SecureFields时,我遇到了非常奇怪的行为。尝试在其中一个SecureField中输入文本会在一个字符处停止,该字段变为黄色并显示“强密码”,并且在第二个SecureField中重复。这发生在iOS 14.2上的Xcode 12.2上的Xcode预览和模拟器中 下面是一个演示此问题的简单示例:在SwiftUI视图中,在TextField之后使用多个SecureFields时的奇怪行为,swiftui,Swiftui,在视图中跟踪文本字段时,尝试使用多个SecureFields时,我遇到了非常奇怪的行为。尝试在其中一个SecureField中输入文本会在一个字符处停止,该字段变为黄色并显示“强密码”,并且在第二个SecureField中重复。这发生在iOS 14.2上的Xcode 12.2上的Xcode预览和模拟器中 下面是一个演示此问题的简单示例: struct SecureFieldTestView: View { @State var displayName: String = "&
struct SecureFieldTestView: View {
@State var displayName: String = ""
@State var password = ""
@State var passwordVerifiation = ""
var body: some View {
VStack {
TextField("Display name", text: $displayName)
SecureField("Password", text: $password)
SecureField("Verify Password", text: $passwordVerifiation)
}
.padding()
}
}
struct SecureFieldTestView_Previews: PreviewProvider {
static var previews: some View {
SecureFieldTestView()
}
}
运行到模拟器时,控制台显示以下错误:
[AutoFill] Cannot show Automatic Strong Passwords for app bundleID: <REDACTED BY ME> due to error: iCloud Keychain is disabled
[Assert] View <(null):0x0> does not conform to UITextInput protocol
[AutoFill]无法显示应用程序绑定ID:的自动强密码,因为错误:iCloud Keychain已禁用
[Assert]视图不符合UIT输出协议
我已经尝试将securefield包装到它们自己的VStack{}中,并将它们全部包装到一个表单{},但问题仍然存在
是否有明显的东西我遗漏了,或者这是SDK中的一个bug?我会向苹果报告一个关于这个问题的bug 但是,目前这里有一个解决方法来解决这个问题,并且仍然使用SecureField,但顶部没有黄色条
SecureField("First", text: $password)
.textContentType(.newPassword)
只需为newPassword添加textContentType,该栏将不会出现。在进一步调查中,出现了另一个问题;软件键盘在延迟一段时间后才会出现。在软件键盘出现之前在SecureFields中输入文本会持续产生问题。等待软件键盘出现可以解决这种奇怪的行为
奇怪的是,当设备/模拟器未登录到iCloud时,键盘外观似乎出现延迟;设备登录时不会出现键盘外观延迟和SecureField问题。这似乎又是SwiftUI中的一个不错的错误。。可能会在FB8897960下提交一个bug报告谢谢,我尝试了一下,如果其中一个SecureFields是第一个文本条目,它确实可以工作。如果TextField条目是第一个文本条目,则它将失败。我做了进一步的调查,发现这个问题与iCloud有关,更多信息请参阅我的答案。我自己也遇到过这个问题。不幸的是,.newPassword对我不起作用。我的视图中还有其他文本字段。如果我先选择其中一个密码字段,解决方法就会起作用。但是,如果我先填充其中一个文本字段,然后选择一个SecureField,则会得到上述行为。