首页 > 解决方案 > TextField swiftui xcode 13

问题描述

我一直在使用 xcode 12 和 swiftui。在我的应用程序中,我有一个带有西班牙语和英语可本地化占位符的 textFiel,我切换到 xcode 13,但它没有显示我的可本地化占位符

在此处输入图像描述

这仅发生在 TextField 中,使用 SecureField 即使使用 Text 也不会发生

这是我的代码

struct ContentView: View {
  @State var email:String = ""
    
    var body: some View {
        VStack () {
           TextField("login5", text: self.$email)
                    .autocapitalization(.none)
                    .padding()
                    .background(RoundedRectangle(cornerRadius: 50).stroke(Color("grayColor")))
        }.padding(.horizontal, 20)
    }
}
                 

可本地化的字符串

"login5" = "Correo eléctronico";

标签: swiftuixcode13

解决方案


SecureFieldios15 中,您可以使用 prompt 参数来获取本地化字符串:

SecureField("purpose", text: $password, prompt: Text("login6"))

或使用标签:

 SecureField(text: $password) {
     Text("login6")
 }

编辑1:

这是我用来显示有效的本地化 TextField 和 SecureField 的测试代码。

import SwiftUI

@main
struct TestApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

struct ContentView: View {
    @State var email = ""
    @State var password = ""
    @State var isVisible = false
    
    var body: some View {
        VStack (spacing: 55) {
            Button(action: { isVisible.toggle() }) {
                Text("Toggle isVisible")
            }
            TextField("login5", text: $email).border(.black)
            if isVisible {
                TextField("login6", text: $password).border(.green)
            } else {
                SecureField("password", text: $password, prompt: Text("login6")).border(.red)
            }
        }.padding(.horizontal, 20)
    }
}

测试Localizable.strings文件。

"login5" = "hola login5";
"login6" = "contraseña";

EDIT2:手动使用 LocalizedStringKey 的替代方法,

TextField(LocalizedStringKey("login5"), text: $email)

推荐阅读