Swift 4中使用NSLocalizedString设置TextField带颜色占位符问题
解决Swift 4中NSLocalizedString配置带颜色的TextField attributedPlaceholder问题
我来帮你搞定这个困扰——你直接用固定字符串设置带颜色的attributedPlaceholder能正常跑,但换成NSLocalizedString就出问题,大概率是两个细节没处理到位:本地化字符串的正确获取,以及**foregroundColor属性值的类型匹配**(你之前代码里用UIColor.black.cgColor其实是个小坑,NSForegroundColorAttributeName需要的是UIColor实例,不是CGColor)。
下面是具体的解决步骤:
第一步:确认你的
Localizable.strings配置无误,比如里面有对应的键值对(以中英文为例):// 中文Localizable.strings "TEXTFIELD_PLACEHOLDER" = "请输入内容"; // 英文Localizable.strings "TEXTFIELD_PLACEHOLDER" = "Enter something";第二步:正确获取本地化字符串,再创建带颜色属性的富文本,注意属性值用
UIColor而非CGColor:// 先拿到本地化后的字符串 let localizedText = NSLocalizedString("TEXTFIELD_PLACEHOLDER", comment: "TextField占位符文本") // 构建带颜色的富文本占位符 let attributedPlaceholder = NSAttributedString( string: localizedText, attributes: [ NSAttributedStringKey.foregroundColor: UIColor.black // 直接传UIColor实例,不用转CGColor ] ) // 赋值给TextField textField.attributedPlaceholder = attributedPlaceholder
额外注意事项:
- 如果你用的是Swift 4.2及更高版本,
NSAttributedStringKey已经被重命名为NSAttributedString.Key,换成NSAttributedString.Key.foregroundColor兼容性更好。 - 不需要同时设置
textField.placeholder和attributedPlaceholder——设置后者后,前者的内容会被忽略,保留attributedPlaceholder的赋值即可。 - 检查
Localizable.strings的文件名、路径和语言勾选情况,确保Xcode能正确读取到本地化文本(可以先打印localizedText,看输出是否符合预期,排除本地化本身的问题)。
内容的提问来源于stack exchange,提问作者Marwan Alakhrass
相关产品推荐
相关产品推荐

