ios 特殊视图结构中奇怪的强密码自动填充行为

x6492ojm  于 2023-07-01  发布在  iOS
关注(0)|答案(1)|浏览(116)

我发现,当**一个TextField和两个SecureField**在视图中时,iOS会在获得焦点后立即自动使用建议的强密码填充两个SecureField。当没有TextField或只有一个SecureField时,它不会复制。好奇怪的行为!
有谁知道为什么会发生这种情况,以及如何避免自动填充?我发现如果我将键盘类型(如numberPad)设置为SecureField,则不会发生这种情况,但我希望它们是密码字段,这不是一个选项。
仅供参考:我正在使用Firebase动态链接与自定义域和关联域在应用程序中配置,这使密码自动填充。

struct ExperimentView: View {
    @State private var text1: String = ""
    @State private var text2: String = ""
    @State private var text3: String = ""

    var body: some View {
        VStack {
            TextField("", text: $text1)
                .textFieldStyle(.roundedBorder)

            SecureField("", text: $text2)
                .textFieldStyle(.roundedBorder)

            SecureField("", text: $text3)
                .textFieldStyle(.roundedBorder)
        }
        .padding()
    }
}
bweufnob

bweufnob1#

您遇到的问题可能是由于iOS密码自动填充功能导致的,该功能会自动为安全字段建议强密码。
避免在SecureFields中自动填写密码,您可以尝试以下操作:
您可以使用disableAutocorrection(_:Bool)修饰符沿着UITextInputTraits扩展以防止自动填充。示例:

import UIKit
import SwiftUI

extension UITextInputTraits {
    var isPasswordBased: Bool {
        return false
    }
}

struct ExperimentView: View {
    @State private var text1: String = ""
    @State private var text2: String = ""
    @State private var text3: String = ""

    var body: some View {
        VStack {
            TextField("", text: $text1)
                .textFieldStyle(.roundedBorder)

            SecureField("", text: $text2)
                .textFieldStyle(.roundedBorder)
                .introspectTextField { textField in
                    textField.disableAutocorrection(textField.isFirstResponder && text2.isEmpty)
                }

            SecureField("", text: $text3)
                .textFieldStyle(.roundedBorder)
                .introspectTextField { textField in
                    textField.disableAutocorrection(textField.isFirstResponder && text3.isEmpty)
                }
        }
        .padding()
    }
}

正如您所提到的,将键盘类型设置为默认密码字段以外的其他类型也可能会阻止自动填充行为。但是,由于您希望这些字段用作密码字段,因此这可能不适合您。
让我知道如果它帮助!!如果是,请通过投票留下您的意见!^^

相关问题