SwiftUI Text默认自动转大写异常问题排查求助
以下是针对主Target中Text自动大写、Widget Target无此问题的排查方向:
检查全局Text外观/扩展设置
主Target的根视图(如App结构体或入口View)可能通过Text.appearance()设置了全局样式,比如添加了.textCase(.uppercase)。另外排查是否存在自定义Text扩展,默认给所有Text添加了大写修饰符,例如:extension Text { func globalStyle() -> some View { self.textCase(.uppercase) } }同时确认是否在根视图通过
.environment(\.defaultTextStyle, ...)注入了全局文本样式。对比主/Widget Target的Info.plist本地化设置
检查主Target的Info.plist中Localization native development region或CFBundleLocalizations的设置,部分区域的系统本地化规则可能会强制文本大写,而Widget Target的本地化配置不同。检查自定义字体的属性设置
如果使用了自定义字体,打开主Target的Asset Catalog,选中对应字体,查看右侧检查器的Font Properties是否勾选了All Caps选项。Widget Target可能未使用该字体或未开启此属性。排查自定义环境变量
确认是否存在自定义EnvironmentValues扩展,给Text设置了默认的大写文本格式,且仅在主Target中注入了该环境值。例如:private struct ForceUppercaseKey: EnvironmentKey { static let defaultValue: Bool = true } extension EnvironmentValues { var forceUppercase: Bool { get { self[ForceUppercaseKey.self] } set { self[ForceUppercaseKey.self] = newValue } } }若存在此类设置,检查主Target根视图是否添加了
.environment(\.forceUppercase, true),而Widget未添加。检查主Target专属的编译宏/代码逻辑
排查代码中是否存在针对主Target的编译宏(如#if MAIN_TARGET),重写了Text的初始化方法,自动将输入字符串转为大写。Widget Target未启用该宏,因此不受影响。清理Xcode缓存
尝试删除Xcode的Derived Data(路径:Xcode → 设置 → 位置 → Derived Data → 打开文件夹删除),重新编译主Target,排除预览缓存导致的异常显示问题。
内容的提问来源于stack exchange,提问作者bjorn.lau

