资讯专栏INFORMATION COLUMN

iOS无障碍化

jlanglang / 893人阅读

摘要:简介在平台下,我们讲无障碍化通常是指对系统功能旁白的支持。入门无障碍化相关的属性都是加在上的,也就是说,页面上的每个元素都具有这些属性,包括。盲人毕竟是小众群体,大部分应用还是没有做好无障碍化。

简介

在iOS平台下,我们讲无障碍化通常是指对系统功能——“旁白”的支持。
UIKit组件对“旁白”的支持比较到位,很多时候开发者并不需要专门做无障碍化即可做到基本兼容,偶尔遇到一些问题也是比较容易处理的。
建议开发者可以先试用一下旁白功能,了解盲人用户的使用方式,再进一步考虑自己的app应当如何适配。相关操作可以参考官方文章学习“旁白”手势。

入门

无障碍化相关的属性都是加在NSObject上的,也就是说,页面上的每个元素都具有这些属性,包括UIWindow。
这里只介绍几个核心属性:

isAccessibilityElement

accessibilityLabel

accessibilityElements

VoiceOver的基本逻辑是,递归遍历当前页面的所有元素。如果一个元素isAccessibilityElement == YES,那么读出这个元素的accessibilityLabel等内容。如果一个元素isAccessibilityElement == NO,那么按照它的accessibilityElements内容遍历其子元素,如果没有设accessibilityElements,按照当前系统语言的一般顺序(汉语和英语都是从左到右从上到下)。

那么我们要做的也就基本清楚了:

如果一个元素需要被直接读出来,isAccessibilityElement设为YES,accessibilityLabel写入合适的文本

如果一个元素不要读出来,但是它的子元素需要读出来,需要把当前元素isAccessibilityElement设为NO,需要读出来的子元素参考前一条

如果需要控制VoiceOver遍历的顺序,设置accessibilityElements

由于系统控件是默认处理好的,而且VoiceOver的默认阅读顺序通常也没什么大问题,因此需要开发者专门去兼容的场景并不会很多。平均算下来每个页面加几行代码就差不多了。

盲人毕竟是小众群体,大部分应用还是没有做好无障碍化。如果一个应用主要场景都能够做到以上几点,在无障碍化上就已经很优秀了。

一些具体问题 1. 手动聚焦

有时弹提示时应当把VoiceOver焦点聚焦到弹出的view
具体参考:iOS change accessibility focus

2. 半透明蒙层

也是类似于弹框提示时,弹框下面通常会有个半透明蒙层,蒙层下的内容不可点击。
VoiceOver此时的表现会很差,能够读到蒙层下的内容但不可点击。
此时需要对蒙层设置accessibilityViewIsModal属性,会使蒙层的同级view不响应VoiceOver,而蒙层的子view可响应。
友情提示:这个属性对Window同样有效。

参考:[Prevent VoiceOver revealing views that are beneath a larger transparent view
](https://stackoverflow.com/que...

3. hidden元素

有时把某个view设成hidden的时候,UI上已经不展示了,但是VoiceOver仍然可以读到。
此时可以使用UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil)强制更新VoiceOver的表现。

参考:VoiceOver controls are selectable when hidden

推荐阅读

官方文档/中文翻译
iOS 无障碍编程指南

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/17304.html

相关文章

  • 【译】让你的应用支持旁白(iOS障碍官方文档)

    摘要:持续关注不支持无障碍的元素并记录一个清单用于添加更好的无障碍支持能力吧。使用旁白浏览你的使用旁白测试,需要你使用旁白功能的一组特定手势。首先需要确认,这个元素是否是无障碍化的,然后添加合适的和。 本文将介绍如何通过添加旁白(VoiceOver)能力让你的iOS App对盲人等视障人士更加友好。 概要 旁白是一种屏幕阅读能力,它使得人们可以在不看屏幕的情况下浏览设备的界面。盲人用户在使用...

    dabai 评论0 收藏0
  • iOS知识梳理 - 目录

    摘要:关于语法中值得注意的东西代码规范的内存管理一概述,二到平台相关系统能力总览集合类视图动画,事件多线程,网络数据持久化无障碍化其它工具调试神器问题总结软件架构语法与的对比 工作快2年,大部分时候都是在怼业务逻辑,回头看看其实有很多东西掌握得不是很好,计划整体梳理一下iOS开发的相关知识。先列个粗略的提纲,慢慢更新。 OC 关于Objective-C OC语法中值得注意的东西 代码规范:...

    wanghui 评论0 收藏0
  • 每日前端进阶第三题:说一说你对HTML5语义的理解

    摘要:作者陈大鱼头链接背景最近高级前端工程师刘小夕在上开了个每个工作日布一个前端相关题的,怀着学习的心态我也参与其中,以下为我的回答,如果有不对的地方,非常欢迎各位指出。如果你采用正宗川菜做法,最后只需加入花生米,炒拌几下就可以起锅了。 作者:陈大鱼头 github: KRISACHAN 链接:github.com/YvetteLau/S… 背景:最近高级前端工程师 刘小夕 在 github 上...

    番茄西红柿 评论0 收藏0
  • 每日前端进阶第三题:说一说你对HTML5语义的理解

    摘要:作者陈大鱼头链接背景最近高级前端工程师刘小夕在上开了个每个工作日布一个前端相关题的,怀着学习的心态我也参与其中,以下为我的回答,如果有不对的地方,非常欢迎各位指出。如果你采用正宗川菜做法,最后只需加入花生米,炒拌几下就可以起锅了。 作者:陈大鱼头 github: KRISACHAN 链接:github.com/YvetteLau/S… 背景:最近高级前端工程师 刘小夕 在 github 上...

    番茄西红柿 评论0 收藏0
  • 每日前端进阶第三题:说一说你对HTML5语义的理解

    摘要:作者陈大鱼头链接背景最近高级前端工程师刘小夕在上开了个每个工作日布一个前端相关题的,怀着学习的心态我也参与其中,以下为我的回答,如果有不对的地方,非常欢迎各位指出。如果你采用正宗川菜做法,最后只需加入花生米,炒拌几下就可以起锅了。 作者:陈大鱼头 github: KRISACHAN 链接:github.com/YvetteLau/S… 背景:最近高级前端工程师 刘小夕 在 github 上...

    Kaede 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<