iOS:“.03 小时”文本的旁白不正确

Posted

技术标签:

【中文标题】iOS:“.03 小时”文本的旁白不正确【英文标题】:iOS: Voice Over doesn't read proper for ".03 hours" text 【发布时间】:2019-07-30 08:37:47 【问题描述】:

我有以下任一格式的文本:

.03 小时

0.03 - 0.05 小时

在上述情况下,可访问性应采用以下格式:

点零三个小时

零点零三(人物名)零点零五小时

但在实际情况下,它的读数如下:

三个小时

零点零三零点五小时

就像我上面提到的,数字格式是从 json 响应中获取的字符串类型,它可能是任何格式,例如 0.03 小时、0.03 小时、0.03 - 0.05 小时、4 - 5 小时

为了解决这个问题,我尝试了很多类似下面的解决方案,但都没有成功

hoursLabel.accessibilityAttributedLabel = NSAttributedString(string: hoursLabel.text ?? "", attributes: [NSAttributedString.Key.accessibilitySpeechPunctuation: NSNumber(value: true)])

谁能帮帮我,如何解决这种情况。

在可能的情况下,它应该适用于所有其他单位,如 .03 (unit)

【问题讨论】:

【参考方案1】:

数字格式是从 json 响应中获取的字符串类型,它可能是任何格式,例如 0.03 小时、0.03 小时、0.03 - .05 小时、4 - 5 小时

首先,您应该重新排列传入的数据,以便具有相同的定义格式。然后,您只需设置此格式,以便 VoiceOver 根据需要朗读。

以下是来自 complete 'date, time and numbers' explanation 的 ObjC 代码 sn-p:

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UILabel * hourLabel;
@end


@implementation ViewController

- (void)viewDidAppear:(BOOL)animated 
    [super viewDidAppear:animated];

    NSDateFormatter * dateFormatter = [[NSDateFormatter alloc]init];
    [dateFormatter setDateFormat:@"0.HH"];

    NSDate * date = [dateFormatter dateFromString:@"0.05"];


    _hourLabel.text = [NSDateFormatter localizedStringFromDate:date
                                                     dateStyle:NSDateFormatterNoStyle
                                                     timeStyle:NSDateFormatterShortStyle];

    NSDateComponents * hourComponents = [[NSCalendar currentCalendar] components:NSCalendarUnitHour
                                                                        fromDate:date];

    _hourLabel.accessibilityLabel = [NSDateComponentsFormatter localizedStringFromDateComponents:hourComponents
                                                                                      unitsStyle:NSDateComponentsFormatterUnitsStyleSpellOut];

@end

除非我误解了你的需要,否则你应该使用这个理由来达到你的目的。

【讨论】:

在可能的情况下,它应该适用于所有单位,不仅适用于像 .03 (unit) 这样的日期格式,而且更新的问题相同。 @AnjaneyuluBattula:我回答您最初的问题,该问题仅涉及小时数。现在,如果您添加其他要求,请创建另一个问题,但请不要通过修改您的目的来编辑您的问题,否则它是无止境的。 是的,我同意您的看法,并感谢您的回答,但我之前忘记添加单位,仅用于创建另一个可能认为重复的问题的单位。而您的答案未涵盖 0.03 - 0.05 小时 这种情况。如果您对此类问题有通用解决方案,请更新您的答案,这将对许多正在寻找此类解决方案的人有所帮助。 @AnjaneyuluBattula:如果这个新问题被认为是重复的,这意味着你处理时间的问题应该在这里被标记为接受,不是吗? ;o) 如果这个答案能像最初期望的那样持续几个小时,请根据您的不同需求调整它以避免重复问题。 你是对的,我知道的细节很少,这就是我要做的:1. 从 JSON 响应中提取你的数字,2. 应用并调整提供的代码 sn-ps每个人的链接(日期,时间和数字)。所提供的网站非常丰富的各种信息:不要犹豫,不时返回作为摘要。

以上是关于iOS:“.03 小时”文本的旁白不正确的主要内容,如果未能解决你的问题,请参考以下文章

NSAttributedString 上的可访问性(旁白)

旁白朗读标签的文字两次

ios UITextView 显示不正确(错误?)

标签中属性文本的固有大小不正确

带有属性文本字体的 ios 标签无法正确显示

在 react-native 项目中,iOS 的 RTL 文本未正确对齐