如何使MasterDetailPage图标VoiceOver可访问?

问题描述:

我Xamarin.Forms应用程序的主网页由MasterDetailPage看起来像下面的:如何使MasterDetailPage图标VoiceOver可访问?

<MasterDetailPage ...> 
    <MasterDetailPage.Master> 
     <v:MasterMenuPage Title="Menu" Icon="icon_hamburger.png" /> 
    </MasterDetailPage.Master> 
    <MasterDetailPage.Detail> 
     ... 
    </MasterDetailPage.Detail> 
</MasterDetailPage> 

当我尝试“听”到我的iOS上10 VoiceOver的激活程序,我注意到,语音读菜单图标为Icon Hamburger而不是Menu

如何设置可访问性文本来克服此问题?

+0

您是否尝试过加入[辅助效果](https://developer.xamarin.com/guides/xamarin-forms/advanced/无障碍/)? – Damian

+0

我试过了,但没有成功。 – Physikbuddha

+0

您是否可以将效果代码添加到您的帖子中,并解释发生了什么 – Damian

从翻看Xamarin.Forms源代码以及如何创建导航项目。我认为能够为该图标设置辅助功能标签的唯一方法是为NavigationPage创建自定义渲染器。

这个例子为我设置了正确的标签。

[assembly: ExportRenderer(typeof(NavigationPage), typeof(*example.iOS.CustomNavigationPageRenderer))] 
namespace *example.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/