iOS
Zugänglichkeit
Suche…
Einführung
Dank der Barrierefreiheit von iOS können Benutzer mit Hörbehinderungen und Sehstörungen auf iOS und Ihre Anwendung zugreifen, indem sie verschiedene Funktionen wie VoiceOver, Sprachsteuerung, Weiß auf Schwarz, Mono-Audio, Sprache zu Text usw. unterstützen. Barrierefreiheit in der iOS-App bereitzustellen bedeutet, die App für alle nutzbar zu machen.
Machen Sie eine Ansicht zugänglich
UIView
Ihre UIView
Unterklasse als barrierefreies Element, damit sie für VoiceOver sichtbar ist.
myView.isAccessibilityElement = YES;
Stellen Sie sicher, dass die Ansicht eine aussagekräftige Bezeichnung, einen Wert und einen Hinweis enthält. Weitere Informationen zur Auswahl guter Beschreibungen finden Sie im Handbuch zur Barrierefreiheit .
Eingabehilfen
Der Eingabehilfenrahmen wird von VoiceOver für Trefferprüfungen verwendet, um den VoiceOver-Cursor zu zeichnen und die Stelle im fokussierten Element zu berechnen, um ein Tippen zu simulieren, wenn der Benutzer den Bildschirm doppelt antippt. Beachten Sie, dass der Rahmen in Bildschirmkoordinaten ist!
myElement.accessibilityFrame = frameInScreenCoordinates;
Wenn sich Ihre Elemente oder Bildschirmlayouts häufig ändern, sollten Sie das Überschreiben von accessibilityFrame
in Betracht ziehen, um immer ein aktuelles Problem zu lösen. Die Berechnung des bildschirmrelevanten Rahmens für Unteransichten der Bildlaufansicht kann fehleranfällig und langwierig sein. iOS 10 führt eine neue API ein, um dies zu erleichtern: accessibilityFrameInContainerSpace
.
Bildschirmwechsel
VoiceOver funktioniert die meiste Zeit über hervorragend und liest Bilder mit Inhalten laut vor und folgt dem Benutzer intuitiv. Leider ist keine allgemeine Lösung perfekt. Manchmal wissen nur Sie als App-Entwickler, wo VoiceOver für eine optimale Benutzererfahrung konzentriert werden sollte. Glücklicherweise überwacht VoiceOver Systemzugriffsbenachrichtigungen auf Hinweise, wo der Fokus liegt. Um den VoiceOver-Cursor manuell zu verschieben, buchen Sie eine Benachrichtigung über einen Eingabehilfen mit geänderter Anzeige:
UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, firstElement);
Wenn diese Benachrichtigung veröffentlicht wird, werden die Benutzer über eine kurze Reihe von Tönen über die Änderung informiert. Der zweite Parameter kann entweder das nächste zu fokussierende Element oder eine Zeichenfolge sein, die die Änderung ankündigt. Veröffentlichen Sie eine Bildschirmänderungsbenachrichtigung nur dann, wenn das VoiceOver-Erlebnis ohne sie schlecht ist und keine andere Problemumgehung vorliegt. Das Bewegen des VoiceOver-Cursors ist wie das Stoßen auf dem Bildschirm eines sehenden Benutzers. Es kann ärgerlich und desorientierend sein, um auf diesem Weg herumgeführt zu werden.
Layout ändern
In vielen Fällen werden Inhalte auf einem einzigen Bildschirm mit neuen oder anderen Inhalten aktualisiert. Stellen Sie sich beispielsweise ein Formular vor, das zusätzliche Optionen enthält, die auf der Antwort des Benutzers auf eine vorherige Frage basieren. In diesem Fall können Sie durch eine Benachrichtigung über eine Layoutänderung entweder die Änderung ankündigen oder sich auf ein neues Element konzentrieren. Diese Benachrichtigung akzeptiert die gleichen Parameter wie die Bildschirmänderungsbenachrichtigung.
UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, firstElement);
Ankündigung
Ankündigungen sind nützlich, um Benutzer auf Ereignisse hinzuweisen, für die keine Interaktion erforderlich ist, z. B. „Bildschirm gesperrt“ oder „Laden abgeschlossen“. Verwenden Sie eine speziellere Ankündigung, um Benutzer über Bildschirmänderungen oder kleinere Layoutänderungen zu informieren.
UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, @"The thing happened!");
Elemente bestellen
VoiceOver navigiert unabhängig von der Ansichtshierarchie von links oben nach rechts unten. In der Regel wird der Inhalt in Sprachen von links nach rechts angeordnet, da sehende Personen den Bildschirm in einem „F-förmigen Muster“ scannen. VoiceOver-Benutzer werden erwarten, auf dieselbe Weise wie normale Benutzer zu navigieren. Vorhersagbarkeit und Konsistenz sind sehr wichtig für die Zugänglichkeit. Bitte nehmen Sie keine Anpassungen vor, die das Standardverhalten „verbessern“ (z. B. die Tabulatorleiste zuerst in der Wischreihenfolge bestellen). Wenn Sie jedoch ein Feedback erhalten haben, dass die Reihenfolge der Elemente in Ihrer App überraschend ist, gibt es mehrere Möglichkeiten, wie Sie das Erlebnis verbessern können.
Wenn VoiceOver die Unteransichten einer Ansicht nacheinander lesen soll, dies jedoch nicht ist, müssen Sie VoiceOver möglicherweise mitteilen, dass die in einer einzelnen Ansicht enthaltenen Elemente miteinander verbunden sind. Sie können dies tun, indem Sie shouldGroupAccessibiltyChildren
:
myView.shouldGroupAccessibilityChildren = YES;
Um komplexe Navigationsstrukturen zu unterstützen, die sich über mehrere Container erstrecken oder Schnittstellen enthalten, die ohne UIKit gerendert werden, sollten Sie das Containerprotokoll in der übergeordneten Ansicht implementieren.
Container für Barrierefreiheit
VoiceOver kann in vielen Apps unter iOS navigieren, da die meisten UIKit
Klassen UIAccessibilityProtocol
implementieren. Funktionen, die keine Bildschirmelemente mit UIView
, einschließlich Apps, die Core Graphics oder Metal zum Zeichnen verwenden, müssen diese Elemente für den barrierefreien UIView
beschreiben. Ab iOS 8.0 kann dies durch Zuweisen einer Eigenschaft in UIView
die nicht zugängliche Elemente enthält:
myInaccessibleContainerView.accessibilityElements = @[elements, that, should, be, accessible];
Jedes Objekt im Array kann eine Instanz von UIAccessibilityElement
oder eine beliebige andere Klasse sein, die UIAccessibilityProtocol
. Die untergeordneten Elemente sollten in der Reihenfolge zurückgegeben werden, in der der Benutzer sie navigieren soll. Als Anwendungsautor können Sie Barrierefreiheitscontainer verwenden, um die Standardreihenfolge der VoiceOver-Swipe-Navigation von links nach rechts zu überschreiben. Da UIView
implementiert UIAccessibilityProtocol
, können Sie Instanzen kombinieren UIAccessibilityElement
und UIView
in der gleichen Reihe von Kinder Zugänglichkeit Elemente. Wenn Sie Elemente manuell zuweisen, müssen Sie keine dynamischen Protokollmethoden für das Eingabehilfen implementieren. Möglicherweise müssen Sie jedoch eine Bildschirmänderungsbenachrichtigung für die von VoiceOver erkannten Elemente ausgeben.
Modale Ansicht
Modale Ansichten erfassen die Aufmerksamkeit des Benutzers vollständig, bis eine Aufgabe abgeschlossen ist. iOS macht dies für Benutzer klarer, indem alle anderen Inhalte abgedunkelt und deaktiviert werden, wenn eine modale Ansicht, beispielsweise eine Warnung oder ein Popover, sichtbar ist. Eine App, die eine benutzerdefinierte modale Benutzeroberfläche implementiert, muss VoiceOver darauf hinweisen, dass diese Ansicht die ungeteilte Aufmerksamkeit des Benutzers verdient, indem accessibilityViewIsModal
. Beachten Sie, dass diese Eigenschaft nur für die Ansicht festgelegt werden sollte, die modalen Inhalt enthält, nicht für Elemente, die in einer modalen Ansicht enthalten sind.
myModalView.accessibilityViewIsModal = YES;
Durch das Markieren einer Ansicht als modal wird VoiceOver aufgefordert, die Ansichten von Geschwistern zu ignorieren. Wenn Sie nach dem Festlegen dieser Eigenschaft feststellen, dass VoiceOver noch in anderen Elementen in Ihrer App navigiert, versuchen Sie, die Problemansichten auszublenden, bis der modale Modus verworfen wird.
Elemente ausblenden
Die meisten UIKit-Klassen, einschließlich UIView, halten sich an UIAccessibilityProtocol
und geben standardmäßig korrekte Werte zurück. Es ist leicht UIView
, dass ein UIView
, der auf "hidden" gesetzt ist, auch nicht in der Hierarchie für UIView
enthalten ist und von VoiceOver nicht navigiert werden kann. Während dieses Standardverhalten normalerweise ausreicht, gibt es Zeiten, in denen eine Ansicht in der Ansichtshierarchie vorhanden, jedoch nicht sichtbar oder navigierbar ist. Beispielsweise kann eine Sammlung von Schaltflächen von einer anderen Ansicht überlappt werden, wodurch sie für einen sehenden Benutzer unsichtbar wird. VoiceOver versucht jedoch immer noch, durch sie zu navigieren, da sie technisch nicht für UIKit
verborgen UIKit
und daher immer noch in der UIKit
vorhanden sind. In solchen Fällen müssen Sie VoiceOver mitteilen, dass auf die übergeordnete Ansicht nicht zugegriffen werden kann. Sie können dies tun, indem Sie die Ansicht explizit von UIKit ausblenden, indem Sie verborgen festlegen, wenn die Ansicht aus dem Bildschirm verschwindet:
myViewFullofButtons.hidden = YES;
Alternativ können Sie die übergeordnete Ansicht sichtbar lassen und die untergeordneten Elemente einfach vor der Eingabehierarchie verbergen:
myViewFullofButtons.accessibilityElementsHidden = YES;
Temporäre Ansichten sind ein weiterer Ort, an dem Sie Elemente aus der Hierarchie für Eingabehilfen ausblenden möchten, während sie für Benutzer sichtbar bleiben. Beispielsweise ist die Ansicht, die angezeigt wird, wenn Sie die Lautstärketaste drücken, für sehende Benutzer sichtbar, erfordert jedoch keine Aufmerksamkeit wie bei einer normalen Warnung. Sie möchten nicht, dass VoiceOver den Benutzer unterbricht und den Cursor von der aktuellen Lautstärke wegbewegt, um die neue Lautstärke anzukündigen, zumal die Einstellung der Lautstärke bereits ein hörbares Feedback durch das Klickgeräusch liefert. In solchen Fällen möchten Sie die Ansicht mithilfe von accessibilityElementsHidden
ausblenden.