VoiceOver — is de ingebouwde schermlezer (screen reader) van Apple, die elk interface-element uitspreekt en het mogelijk maakt het apparaat met gebaren te bedienen. De technologie is op systeemniveau ingebouwd in iOS, iPadOS en macOS en vereist geen installatie van extra software. Volgens Apple Accessibility (2025) ondersteunt VoiceOver meer dan 40 talen en wordt het gebruikt door miljoenen blinde en slechtziende gebruikers wereldwijd.
Belangrijkste punten
VoiceOver — is een schermlezer (screen reader) die is ingebouwd in de besturingssystemen van Apple. Het is bedoeld voor blinde en slechtziende gebruikers en zorgt voor volledige interactie met het apparaat zonder visueel contact. VoiceOver spreekt alle interface-elementen uit: knoppen, links, tekst, afbeeldingen, meldingen en systeemelementen.
De technologie werd voor het eerst geïntroduceerd in 2005 voor macOS en verscheen op iOS met de iPhone 3GS in 2009. Sindsdien is VoiceOver een integraal onderdeel geworden van het Apple-ecosysteem en een van de belangrijkste argumenten voor de toegankelijkheid van het platform. VoiceOver is op systeemniveau ingebouwd — het werkt in elke app zonder extra integratie van de ontwikkelaar, hoewel de kwaliteit van de uitspraak direct afhangt van hoe goed de app de toegankelijkheids-API van iOS gebruikt.
VoiceOver ondersteunt meer dan 40 talen met natuurlijke spraaksynthese en past zich aan regionale steminstellingen aan. Op iOS gebruikt VoiceOver de spraakmotoren van Siri voor het Nederlands en andere talen, wat een zo natuurlijk mogelijke klank en correcte intonatie garandeert, afhankelijk van interpunctie en context.
VoiceOver onderschept aanraakgebeurtenissen en interpreteert deze anders dan de standaard iOS-invoer. Wanneer de gebruiker het scherm aanraakt, activeert VoiceOver het element onder de vinger niet, maar spreekt het eerst uit. Pas na een dubbele tik wordt het element geactiveerd. Dit is het belangrijkste verschil dat blinde gebruikers in staat stelt de interface te verkennen zonder risico op onbedoeld tikken.
VoiceOver leest interface-elementen in logische volgorde: van links naar rechts, van boven naar beneden. De leesvolgorde wordt overgenomen uit de weergavehiërarchie van iOS, maar de ontwikkelaar kan deze wijzigen via de eigenschap accessibilityElements voor complexe lay-outs. De gebruiker kan navigeren tussen elementen door naar rechts (volgende) en links (vorige) te vegen, en door een specifiek element aan te raken om het te laten uitspreken.
Bij elke verplaatsing spreekt VoiceOver het type element (knop, link, kop), de naam (accessibilityLabel), de status (geselecteerd, uitgeschakeld) en de hint (accessibilityHint) uit. Als het element een waarde bevat — bijvoorbeeld een volumeschuif — spreekt VoiceOver ook die uit. Accessibility Traits (UIAccessibilityTraits) informeren de gebruiker bovendien over het gedrag van het element: of het een knop, schakelaar, zoekopdracht of toetsenbordtoets is.
De rotor — is een virtuele bedieningsknop die de navigatiemodus van VoiceOver schakelt. De gebruiker draait de rotor met twee vingers (als een volumeknop) en selecteert de modus: woorden, tekens, koppen, links, invoerpunten, tabelrijen en andere. Koppenmodus maakt snel schakelen tussen H1-H6 op webpagina's en in apps mogelijk, en tekennodus — het uitspreken van tekst letter voor letter, wat handig is bij het invullen van formulieren of het invoeren van bevestigingscodes.
De ontwikkelaar kan via de UIAccessibilityCustomRotor API eigen modi aan de rotor toevoegen. Bijvoorbeeld in een notities-app kan een rotor „Favoriete notities" of „Recente wijzigingen" worden toegevoegd. Aangepaste rotors versnellen de navigatie in specifieke apps aanzienlijk en worden beschouwd als de beste toegankelijkheidspraktijk op iOS.
VoiceOver gebruikt zijn eigen reeks gebaren die niet overeenkomen met de standaard iOS-gebaren. De meeste gebaren worden met drie vingers uitgevoerd in plaats van één — dit voorkomt conflicten met de normale bediening en laat VoiceOver tegelijkertijd met standaardinvoer werken.
| Actie | Gebaar | Resultaat |
|---|---|---|
| Element uitspreken | Aanraken met 1 vinger | Spreekt de naam van het element uit |
| Activeren | Dubbeltikken | Knop of link indrukken |
| Volgend element | Naar rechts vegen | Naar het volgende gaan |
| Vorig element | Naar links vegen | Terug naar het vorige |
| Scrollen | 3 vingers vegen | Lijst of pagina scrollen |
| Rotor | 2 vingers draaien | Navigatiemodus wijzigen |
Het gebaar dubbeltikken is de primaire manier om elementen in VoiceOver te activeren. Als een element een speciale actie vereist (bijvoorbeeld slepen), gebruikt VoiceOver de reeks „aanraken — dubbeltikken en vasthouden" om in de verplaatsingsmodus te komen. Dit maakt het mogelijk complexe gebaren zoals drag-and-drop uit te voeren zonder naar het scherm te kijken. VoiceOver ondersteunt ook het gebaar „dubbeltikken met twee vingers" om een actie te annuleren en „drievoudig tikken" om het schermgordijn (Screen Curtain) in of uit te schakelen.
Een iOS-appontwikkelaar kan de interactie met VoiceOver aanzienlijk verbeteren via de UIAccessibility API. Basistoegankelijkheidsinstellingen worden toegevoegd in Interface Builder (Identity Inspector → Accessibility), maar voor complexe interfaces is programmatische configuratie in code vereist.
De eigenschap accessibilityLabel bepaalt de tekst die VoiceOver voor een element uitspreekt. Als het label niet is ingesteld, gebruikt VoiceOver de knoptekst of de placeholder van het tekstveld. Voor elementen zonder tekst (pictogrammen, aangepaste weergaven) is een label verplicht. De eigenschap accessibilityTraits bepaalt het type element: knop, kop, schakelaar, zoekopdracht, toetsenbordtoets, veranderlijke waarde, link en andere.
let profileButton = UIButton(type: .custom)
profileButton.setImage(UIImage(named: "avatar"), for: .normal)
profileButton.isAccessibilityElement = true
profileButton.accessibilityLabel = "Gebruikersprofiel"
profileButton.accessibilityTraits = .button
profileButton.accessibilityHint = "Opent het profielinstellingenscherm"
De vlag isAccessibilityElement schakelt VoiceOver-ondersteuning in voor aangepaste weergaven — standaard is deze alleen true voor standaardelementen (UIButton, UILabel, UITextField). De parameter accessibilityHint voegt een hint toe: VoiceOver spreekt deze uit na een pauze als de gebruiker bij een element stopt. Hint moet het resultaat van de actie beschrijven, niet de instructie: „Opent het instellingenscherm" in plaats van „Druk om te openen".
Voor complexe schermen waar de logische groep elementen niet overeenkomt met de visuele volgorde, wordt accessibilityElements gebruikt — een array die de leesvolgorde bepaalt. Een productkaart bevat bijvoorbeeld een afbeelding, naam, prijs en een knop „In winkelwagen". Als deze elementen chaotisch zijn gerangschikt in de weergavehiërarchie, stelt accessibilityElements de juiste volgorde in voor VoiceOver.
let productCard = UIView()
let productImage = UIImageView()
let productName = UILabel()
let productPrice = UILabel()
let addToCartButton = UIButton()
productCard.accessibilityElements = [
productImage, productName, productPrice, addToCartButton
]
Voor het combineren van meerdere elementen in één toegankelijk element wordt UIAccessibilityContainer of accessibilityFrame gebruikt om het aanraakgebied te overschrijven. Dit is handig wanneer een tabelcel meerdere UI-componenten bevat, maar logisch één element vertegenwoordigt — VoiceOver moet de hele cel als geheel uitspreken, niet de inhoud afzonderlijk doorlopen.
Correcte toegankelijkheidsconfiguratie voor VoiceOver vereist aandacht voor verschillende aspecten: semantische markup, dynamische updates, verwerking van aangepaste elementen en testen met een echte screen reader.
In SwiftUI wordt toegankelijkheid geconfigureerd via de modifiers .accessibilityLabel(), .accessibilityValue(), .accessibilityHint() en .accessibilityAddTraits(). SwiftUI erft automatisch toegankelijkheid van standaardelementen, maar voor aangepaste componenten is expliciete configuratie vereist. Een aangepaste schuifregelaar moet bijvoorbeeld VoiceOver informeren over zijn waarde en wijzigingsformaat.
Slider(value: $volume, in: 0...100)
.accessibilityLabel("Geluidsvolume")
.accessibilityValue(
Text("\(Int(volume)) procent")
)
.accessibilityAddTraits(.adjustsAudioForAccessibility)
.accessibilityAdjustableAction { direction in
switch direction {
case .increment: volume = min(volume + 5, 100)
case .decrement: volume = max(volume - 5, 0)
}
}
De modifier accessibilityAdjustableAction voegt de mogelijkheid toe om de waarde te wijzigen met VoiceOver-gebaren: omhoog vegen — verhogen, omlaag vegen — verlagen. Zonder deze modifier blijft de schuifregelaar ontoegankelijk voor bediening via de screen reader. Een vergelijkbare configuratie is vereist voor aangepaste steppers, pickers en andere elementen die hun waarde wijzigen.
Wanneer de inhoud op het scherm dynamisch verandert (er verschijnt een melding, de laadstatus wordt bijgewerkt, de prijs verandert), moet VoiceOver een melding ontvangen via UIAccessibility.post. Zonder deze aanroep zal de screen reader niet op de hoogte zijn van wijzigingen en zal de gebruiker belangrijke informatie missen. Voor SwiftUI wordt de modifier .accessibilityAnnouncement() gebruikt.
UIAccessibility.post(
notification: .announcement,
argument: "Prijs verlaagd met 20 procent"
)
// SwiftUI
Text("Prijs bijgewerkt")
.accessibilityAnnouncement(Text("20% korting"))
VoiceOver-meldingen moeten verstandig worden gebruikt: overmatige aankondigingen irriteren de gebruiker, terwijl het ontbreken ervan de app ontoegankelijk maakt. De optimale strategie is alleen wijzigingen aan te kondigen die de huidige workflow van de gebruiker beïnvloeden: winkelwagenupdate, laadstatus, validatiefout van een formulier, chatmelding. Achtergrondwijzigingen (tijd op de balk, wisselkoers) hoeven niet te worden aangekondigd — de gebruiker controleert ze zelf indien nodig.
VoiceOver testen wordt uitgevoerd via een fysiek apparaat met ingeschakelde screen reader of de iOS-simulator met de optie Accessibility Inspector. Het is belangrijk om volledige gebruiks scenario's te testen: zonder visuele controle registreren, een bestelling plaatsen, een product vinden via zoeken. Als het pad begaanbaar is zonder visuele feedback — is VoiceOver correct geconfigureerd.
Veelgestelde vragen
Instellingen → Toegankelijkheid → VoiceOver. Schakel de schakelaar in. Voor snel inschakelen wordt drie keer indrukken van de zijknop (op iPhone X en nieuwer) of de Home-knop gebruikt. Siri kan ook VoiceOver inschakelen met de opdracht „Zet VoiceOver aan".
VoiceOver — de Apple schermlezer voor iOS, TalkBack — de Google schermlezer voor Android. Het werkingsprincipe is hetzelfde: aanraken spreekt uit, dubbeltikken activeert. Het verschil zit in gebaren, rotorinstellingen en ecosysteemintegraties: VoiceOver is dieper geïntegreerd met iCloud en Apple Pay.
Gebruik de UIAccessibility API: stel accessibilityLabel in voor alle elementen, accessibilityTraits voor het type element en accessibilityHint voor hints. In SwiftUI gebruik je de modifiers .accessibilityLabel() en .accessibilityAddTraits(). Test de app met ingeschakelde VoiceOver.
De rotor — is een navigatiemodus die wordt geschakeld door met twee vingers te draaien. Het bepaalt hoe je tussen elementen navigeert: op koppen, tekens, woorden, links of invoerpunten. Ontwikkelaars kunnen hun eigen modi toevoegen via UIAccessibilityCustomRotor.
Voor aangepaste UIView's moet je isAccessibilityElement = true instellen en accessibilityLabel opgeven. Als het element uit meerdere onderliggende weergaven bestaat, gebruik dan accessibilityElements om de leesvolgorde in te stellen of combineer ze in een container.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook