gpt4 book ai didi

ios - 如何使 MasterDetailPage 图标 VoiceOver 易于访问?

转载 作者:行者123 更新时间:2023-11-29 11:41:51 24 4
gpt4 key购买 nike

我的 Xamarin.Forms 应用的主页包含一个如下所示的 MasterDetailPage:

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

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

如何设置可访问性文本来解决这个问题?

最佳答案

通过查看 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;
}
}
}

关于ios - 如何使 MasterDetailPage 图标 VoiceOver 易于访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46069464/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com