Xamarin Forms自定义字体iOS

问题描述 投票:0回答:1

Xamarin v4.4.0.991640(当前最新)

我具有实现代码,因此该应用程序(Android和iOS)使用自定义字体。我还实现了自定义渲染器,以便导航标题也使用自定义字体。 Android可以正常工作(在两种情况下都可以),但是在iOS中根本不使用字体?

在iOS中,我已执行以下操作:

ttf文件位于Resources / Fonts / Promento.ttf(BundleResource)

Info.plist中,我有

  <key>UIAppFonts</key>
  <array>
        <string>Fonts/Promento.ttf</string>
  </array>

ResourceDictionary中,我有:

<OnPlatform x:TypeArguments="x:String" x:Key="Promento">
    <On Platform="Android" Value="Promento.ttf#Promento" />
    <On Platform="iOS" Value="Promento" />
</OnPlatform>

字体似乎没有被拾取。在我的自定义渲染器中,我有:

[assembly: Xamarin.Forms.ExportRenderer(typeof(Xamarin.Forms.NavigationPage), typeof(CustomNavigationRenderer))]
namespace GlueStep.Mobile.iOS.Renderers
{
    public class CustomNavigationRenderer : NavigationRenderer
    {
        protected override void OnElementChanged(VisualElementChangedEventArgs e)
        {
            base.OnElementChanged(e);

            if (!(e.NewElement is null))
            {
                var attributes = new UITextAttributes();
                attributes.Font = UIFont.FromName("Promento", 24);

                UINavigationBar.Appearance.SetTitleTextAttributes(attributes);
            }
        }
    }
}

我注意到的是,如果我在此行上设置一个断点,然后访问导航页:

UINavigationBar.Appearance.SetTitleTextAttributes(attributes);

然后属性。字体始终为null

谁能看到我想念的东西吗?

xamarin xamarin.forms xamarin.ios
1个回答
0
投票

最终的工作细节如下:

字体位置:

Resources/Fonts/PrometoW02-Regular.ttf

资源字典(忽略Android行,在该应用中,它只是“ Prometo.ttf”。我想可以将其重命名):

<OnPlatform x:TypeArguments="x:String" x:Key="Prometo">
    <On Platform="Android" Value="Prometo.ttf#Prometo" />
    <On Platform="iOS" Value="PrometoW02-Regular" />
</OnPlatform>

Info.plist:

  <key>UIAppFonts</key>
  <array>
        <string>Fonts/PrometoW02-Regular.ttf</string>
  </array>

用法示例:

<Style Class="OK" TargetType="Button">
    <Setter Property="FontFamily" Value="{StaticResource Prometo}" />
© www.soinside.com 2019 - 2024. All rights reserved.