Native mobile app support for headings

(Read 512 times)

Mobile native applications are often with no headings. Sometimes even have visual headings but are missing on the semantics. Screen-reader users can and also like to navigate via headings, so we should be responsible and use them. They are supported on both iOS and Android.

When auditing an iOS app against EN 301-549 I stumbled upon multiple screens that should have a semantic heading, but were actually just showing bold text that really looked like heading. I immediately reacted that this is a obvious WCAG success criterion 1.3.1 fail (opens in new window).

As I am not a native mobile developer I decided to investigate what we can actually do about it. And in this post I will briefly describe my findings.

iOS and Android both support headings

It didn’t take me long to find solutions for headings on both platforms. iOS seems to have better support as developers can even define heading levels, just like in HTML – from level 1 to level 6. And iOS also supports just a heading, with no level.

Official iOS documentation on headings (opens in new window). I actually made a simple Swift based app and tested it with VoiceOver and it worked like a charm.

On the Android platform we can still make a semantic heading but we don’t have the possibility for different levels. Official Android documentation on headings (opens in new window) doesn’t mention levels as far as I was able to tell. It’s only possible to set it to true or false.

I was pleasantly surprised about iOS heading levels and I hope designers, developers and content providers will use them as they really make the app navigation with VoiceOver much better and more “web-like”.

React Native supports heading as well

React Native supports headings but no levels. Not a surprise as it has to unify the APIs of both iOS and Android and if Android is not supporting levels then also React Native can not support them.

It is a bit strange though that developers must use a role of “header” and not “heading”. I had to double check that and it is correct.

Official React Native documentation offers accessibilityRole=”header” (opens in new window) as a solution for headings. Personally I find this a bit strange, coming from web development, as header in HTML represents the header region and not headings. But I guess we can still live with it, just have to remember it.

So – no excuses – use headings!

Just a final reminder – headings are possible also on mobile applications. They make page navigation with screen-reader much more efficient and people are most probably used of having them from their web experiences.

Author: Bogdan Cerovac

I am IAAP certified Web Accessibility Specialist (from 2020) and was Google certified Mobile Web Specialist.

Work as digital agency co-owner web developer and accessibility lead.

Sole entrepreneur behind IDEA-lab Cerovac (Inclusion, Diversity, Equity and Accessibility lab) after work. Check out my Accessibility Services if you want me to help your with digital accessibility.

Also head of the expert council at Institute for Digital Accessibility A11Y.si (in Slovenian).

Living and working in Norway (🇳🇴), originally from Slovenia (🇸🇮), loves exploring the globe (🌐).

Nurturing the web from 1999, this blog from 2019.

More about me and how to contact me: