自从在Xcode 11 GM中打开项目以来,我遇到了一个分组的UITableView无法在我的设置控制器中本地化的问题。
我使用可本地化的字符串并检查所有ObjectId是否正确。它适用于Xcode 10和iOS 12 SDK。奇怪的是,本地化在应用程序的其他任何地方都有效。只是一个TableView。
有人,有什么想法吗?我什至尝试删除本地化并再次添加。
答案 0 :(得分:11)
更新:该问题似乎已在Xcode 11.2中修复
-
现在已在Xcode 11.1 GM的发行说明中将其视为一个问题。
情节提要和XIB文件中的UITableViewCell标签在运行时不使用字符串文件中的本地化字符串值。 (52839404)
https://developer.apple.com/documentation/xcode_release_notes/xcode_11_1_release_notes/
答案 1 :(得分:9)
我在Xcode 11 GM上遇到了同样的问题。 就我而言,静态UITableViewCell中标题UILabel的本地化字符串未应用。
这是我的解决方法;
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = super.tableView(tableView, cellForRowAt: indexPath)
if let label = cell.textLabel, let id = label.accessibilityIdentifier, id.count > 0 {
let key = id + ".text"
let localizedString = NSLocalizedString(key, tableName: "Main", comment: "")
if key != localizedString {
label.text = localizedString
}
}
return cell
}
答案 2 :(得分:2)
Xcode 11现在已经正式发布,但是事情似乎没有改变。我还有一个带有静态单元格的表,使用objectIds可以正确定位单元格的标题,并且这种方法还可以正常工作数年。但是从iOS 13开始,我必须创建IBOutlet并在viewDidLoad中本地化静态单元格。如果有人有更好的主意,欢迎您!
答案 3 :(得分:2)
lavox提供的解决方法也对我有用。在我的应用中,我使用的是Objective-C。这是对应的:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [super tableView:tableView cellForRowAtIndexPath:indexPath];
if(cell != Nil) {
UILabel *label = cell.textLabel;
NSString *labelId = label.accessibilityIdentifier;
if (labelId.length > 0) {
NSString *key = [labelId stringByAppendingString:@".text"];
NSString *localizedString = NSLocalizedStringFromTable(key, @"Main", @"");
if (key != localizedString) {
label.text = localizedString;
}
}
}
return cell;
}
答案 4 :(得分:0)