Xcode 13 下 SwiftUI 的 TextField 本地化占位符无法显示问题求助
问题根因
该问题由Xcode 13对SwiftUI TextField的API默认行为变更导致:
- Xcode 12及更早版本中,
TextField初始化传入的String类型参数会自动被识别为本地化key,匹配Localizable.strings中的对应翻译 - Xcode 13调整了
TextField的重载优先级,传入纯String参数时会直接作为文本渲染,不再自动触发本地化查找,仅显式传入LocalizedStringKey类型参数才会执行本地化逻辑。SecureField、Text组件未调整该行为,因此无异常。
修复方案
- 方案1:显式将key转换为
LocalizedStringKey,单一场景修改成本最低
struct ContentView: View { @State var email:String = "" var body: some View { VStack () { TextField(LocalizedStringKey("login5"), text: self.$email) .autocapitalization(.none) .padding() .background(RoundedRectangle(cornerRadius: 50).stroke(Color("grayColor"))) }.padding(.horizontal, 20) } }
- 方案2:使用
NSLocalizedString包裹key,适用于需要补充本地化备注的场景
TextField(NSLocalizedString("login5", comment: "登录页邮箱输入框占位符"), text: self.$email)
- 方案3:全局扩展
TextField兼容旧版本行为,无需逐个修改现有业务代码
extension TextField where Label == Text { init(_ titleKey: String, text: Binding<String>, onEditingChanged: @escaping (Bool) -> Void = { _ in }, onCommit: @escaping () -> Void = {}) { self.init(LocalizedStringKey(titleKey), text: text, onEditingChanged: onEditingChanged, onCommit: onCommit) } }
问题现象截图

内容的提问来源于stack exchange,提问作者Laura Ramírez
相关产品推荐
相关产品推荐

