7

いくつかのコントロール(ボタン、ラベルなど)を含むUIViewがあります。このビューを別のビューにオーバーレイします(addSubviewを使用)。ユーザーがVoiceOverをオンにしている場合は、左右にスワイプしてコントロールを選択できます。ただし、ビューを非表示にしてコントロールが表示されなくなった場合でも、ユーザーはスワイプして選択できます(実際には機能しませんが)。これは目の不自由なユーザーには非常に混乱するので、これが起こらないようにしたいと思います。コントロールを含むビューを削除しようとしましたが(removeFromSuperviewを使用)、ユーザーはまだスワイプしてコントロールを選択できます(ただし、コントロールを強調表示する小さなボックスは正しい位置にありません)。それは、VoiceOverがそれらのコントロールがかつてそこにあったことを記憶していて、それを永遠に覚えているようなものです。

また、プロパティ'accessibilityElementsHidden'を見つけ、非表示のときにコントロールを含むビューでYESに設定しようとしましたが、どちらも機能しないようです。

これはVoiceOverのバグですか、それとも何かが足りませんか?回避策はありますか?

ありがとう。

4

2 に答える 2

12

UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil)「記憶された」部分は、サブビューを削除した後のようなことをしていないと思います。

于 2012-01-13T04:57:55.483 に答える
8

「accessibilityElementsHidden」のドキュメントには次のように記載されています。

このアクセシビリティ要素に含まれるアクセシビリティ要素が非表示かどうかを示すブール値。..... このプロパティのデフォルト値は NO です。このプロパティを使用して、新しいビューの到着によってカバーされるビューを非表示にすることができます。この場合、非表示のビューは画面に表示されたままになる可能性がありますが、ユーザーのアクションの対象にはなりません。

このプロパティを使用して、VoiceOver ユーザーが気付く必要のない一時的なビューを非表示にすることもできます。たとえば、VoiceOver は、ユーザーがデバイスの音量を調整するときに表示される半透明のビューを記述する必要はありません。このアクションの聴覚フィードバックで十分だからです。

これに基づいて、これらのサブビューを VoiceOver で無視するには、実際には親ビューでこれを「YES」に設定する必要があります。

于 2012-01-13T04:54:11.277 に答える