为什么不使用自定义字体? Xamarin.Forms.iOS

时间:2017-01-10 10:58:59

标签: c# ios xamarin xamarin.ios xamarin.forms

我正在使用自定义字体,目前是一种名为“Yellowtail-Regular.tff”的字体。我在iOS文件夹中创建了一个名为Fonts的地图,然后在那里添加了tff文件。之后我去了我的Info.plist并创建了一个Fonts provided by application,在那里我创建了一个名为Fonts/Yellowtail-Regular.ttf的新字符串。

当我现在尝试使用它时:

<Label FontFamily = "Yellowtail" Text = "Testing my label" />

标准字体(Helvetica Neue)仍然存在。我也尝试过:

<Label FontFamily = "Yellowtail-Regular" Text = "Testing my label" />

但结果相同。

我错过了一步还是我做错了什么?

2 个答案:

答案 0 :(得分:4)

如果您使用http://www.1001freefonts.com/yellowtail.font中的Yellowtail-Regular.ttf,那么iOS下的字体名称将只是Yellowtail

每个平台都有不同的命名约定,因此使用Device.OnPlatform可能类似于:

public Label()
{
  FontFamily = Device.OnPlatform("Yellowtail", "Yellowtail-Regular", "/Assets/Yellowtail-Regular.ttf#Yellowtail-Regular");      
}

要确认您的iOS字体系列名称,请在macOS上使用.ttf打开Font BookmacOS / iOS将使用的名称为{1}}在应用程序的标题栏中。

答案 1 :(得分:1)

有时字体书中会显示带有空格的名称。

就我而言: 字体名称是:SFProDisplay-Ultralight。但是字体书显示 名称为“ SF Pro Display Ultralight”。由于此自定义字体在iOS中不起作用。

因此,您可以使用下面的代码找到正确的字体名称,并将其应用到iOS中。 将此代码添加到AppDelegate启动方法中。然后,您可以在“应用程序”输出中找到可行的字体名称列表。

foreach (var family in UIFont.FamilyNames)
{
    System.Diagnostics.Debug.WriteLine($"{family}");

    foreach (var names in UIFont.FontNamesForFamilyName(family))
    {
        System.Diagnostics.Debug.WriteLine($"{names}");
    }
}

之后,您可以使用xaml来引用字体。

<OnPlatform x:Key="SFProDisplayUltraLight" x:TypeArguments="x:String">
    <On Platform="iOS" Value="SFProDisplay-Ultralight" />
    <On Platform="Android" Value="SF-Pro-Display-Ultralight.otf#SF Pro Display Ultralight" />
</OnPlatform>

然后将其应用于控件。

<Lable Text="Welcome" FontFamily="{StaticResource SFProDisplayUltraLight}"/>