我的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
。
如何设置辅助功能文本以克服此问题?
答案 0 :(得分:1)
从查看Xamarin.Forms源代码,以及它如何创建该导航项。我认为您能够为该图标设置辅助功能标签的唯一方法是为NavigationPage创建自定义渲染器。
此示例为我正确设置标签。
[assembly: ExportRenderer(typeof(NavigationPage), typeof(stackoverflowexample.iOS.CustomNavigationPageRenderer))]
namespace stackoverflowexample.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;
}
}
}
答案 1 :(得分:0)