如何覆盖iOS的Xamarin Forms TabbedPage项目字体?

时间:2016-05-09 17:55:03

标签: xamarin xamarin.ios xamarin.forms

为了实现我的Xamarin Forms应用程序的一致外观,我需要知道如何更改选项卡式页面选项卡栏图标的字体。使用UITabBarItem.Appearance作为iOS API会建议似乎没有任何效果。这样做有什么必要?

2 个答案:

答案 0 :(得分:2)

你需要编写像这样的自定义渲染器,从下面的代码中获取线索!它有你想要的东西

MyIDisposableObject obj;
try
{
    obj = new MyIDisposableObject();
}
finally
{
    if (obj != null)
    {
        ((IDisposable)obj).Dispose();
    }
}

答案 1 :(得分:1)

这是一个特别有趣的问题。我试过了:

UITabBarItem.Appearance

使用UITabBarItem.Appearance.SetTitleTextAttributes方法将UITextAttribute更新为UIControlState.Normal的字体(大小9.0f)。这似乎没有任何区别。

UINavigationBar.Appearance

我发现设置UINavigationBar.Appearance.SetTitleTextAttributes会更新UINavigationBar文字外观以及UITabBarItem文字外观。

这是一个问题,因为标签页项目字体大小太大了。

自定义TabbedRenderer

受到我在某处看到的样本的启发,我在iOS项目中继承了TabbedRenderer

我尝试覆盖TabbedRenderer.SelectedViewController属性的settor并循环遍历ViewControllers属性来设置其项目。图标将以标准字体显示,但一旦用户更改了标签,他们就会更新为所需的字体。几乎就在那里!

然后我尝试覆盖AddChildViewController并在添加控制器TabBarItem之后更新该控制器,但最终没有效果。在添加控制器后的某个时刻,添加页面的TabBarItem正在更新。

最终我发现覆盖ViewWillAppear并设置当时所有标签栏项目的外观似乎完成了我想要的工作。

我在this gist中添加了一个示例。