Как сделать значок MasterDetailPage VoiceOver доступным?
Главная страница моего приложения Xamarin.Forms состоит из MasterDetailPage, который выглядит следующим образом:
<MasterDetailPage ...>
<MasterDetailPage.Master>
<v:MasterMenuPage Title="Menu" Icon="icon_hamburger.png" />
</MasterDetailPage.Master>
<MasterDetailPage.Detail>
...
</MasterDetailPage.Detail>
</MasterDetailPage>
Когда я попытался "прослушать" мое приложение на iOS 10 с активированным VoiceOver, я заметил, что голос читает значок меню как Icon Hamburger
вместо Menu
,
Как я могу установить текст доступности, чтобы преодолеть эту проблему?
2 ответа
Из просмотра исходного кода Xamarin.Forms и того, как он создает этот элемент навигации. Я думаю, что единственный способ, которым вы сможете установить метку доступности для этого значка, - это создание собственного средства визуализации для NavigationPage.
Этот пример устанавливает метку правильно для меня.
[assembly: ExportRenderer(typeof(NavigationPage), typeof(stackruexample.iOS.CustomNavigationPageRenderer))]
namespace stackruexample.iOS
{
public class CustomNavigationPageRenderer : NavigationRenderer
{
protected override void OnElementChanged(VisualElementChangedEventArgs e)
{
base.OnElementChanged(e);
var button = GetNavigationButton();
if (button == null) return;
button.AccessibilityLabel = GetMasterPageTitle();
}
UIBarButtonItem GetNavigationButton()
{
var nav = this.NativeView.Subviews.OfType<UINavigationBar>().FirstOrDefault();
var navItem = nav.Items.FirstOrDefault(x => x.LeftBarButtonItem != null);
return navItem?.LeftBarButtonItem;
}
string GetMasterPageTitle()
{
var parentPages = ((Page)Element).GetParentPages();
var masterDetail = parentPages.OfType<MasterDetailPage>().FirstOrDefault();
return masterDetail?.Master?.Title;
}
}
}
Пытаться:
AutomationProperties.SetIsInAccessibleTree(yourElement, true);
AutomationProperties.SetName(yourElement, "textToBeSpoken");
источник: https://blog.xamarin.com/accessbility-xamarin-forms/