SwiftUI预览画布忽略locale设置,.environment修改locale不生效如何解决
问题原因
这是Xcode 12.5 ~ 12.5.1版本的已知Bug,SwiftUI预览的本地化逻辑会优先读取Xcode全局Scheme配置的运行语言,单独给预览View设置\.locale环境变量无法覆盖全局配置,因此仅在模拟器运行时读取系统语言的逻辑正常,预览场景不生效。
解决方案
分两种情况处理:
- 可升级Xcode版本:直接升级到Xcode 13及以上版本,Apple已经在后续版本修复了该问题,你当前写的
.environment(\.locale, .init(identifier: "es"))配置可以直接生效,不需要额外修改。 - 必须保留Xcode 12.5.1版本:可选用以下任意一种方案解决
- 修改全局Scheme语言配置
点击Xcode顶部导航栏的Scheme选择框 → 选择Edit Scheme→ 切换到Run选项卡 → 进入Options页面 → 将Application Language修改为你需要测试的西班牙语(Spanish, es),之后无需额外加locale环境配置,预览会直接显示对应语言的本地化内容。 - 不修改全局Scheme,在预览代码中额外指定本地化bundle
给你的预览View新增\.localizationBundle环境变量配置,修改后的预览代码如下:
static var previews: some View { ForEach(["iPhone 8", "iPhone X", "iPhone XS Max"], id: \.self) { deviceName in MainContentView() .environment(\.locale, .init(identifier: "es")) .environment(\.localizationBundle, .main) // 新增该行强制指定本地化资源包 .previewDevice(PreviewDevice(rawValue: deviceName)) .previewDisplayName(deviceName) } }- 清除Xcode缓存重试
若修改后依旧不生效,按下快捷键Option + Shift + Command + K清除构建文件夹,重启Xcode后重新加载预览即可。
- 修改全局Scheme语言配置
内容的提问来源于stack exchange,提问作者Ilya
相关产品推荐
相关产品推荐

