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

Mar*_*man 2 c# xamarin.ios ios xamarin xamarin.forms

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

现在,当我尝试像这样使用它时:

<Label FontFamily = "Yellowtail" Text = "Testing my label" />
Run Code Online (Sandbox Code Playgroud)

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

<Label FontFamily = "Yellowtail-Regular" Text = "Testing my label" />
Run Code Online (Sandbox Code Playgroud)

但是结果相同。

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

uda*_*tin 6

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

就我而言:字体名称是: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}");
    }
}
Run Code Online (Sandbox Code Playgroud)

之后,您可以使用 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>
Run Code Online (Sandbox Code Playgroud)

然后将其应用于控件。

<Lable Text="Welcome" FontFamily="{StaticResource SFProDisplayUltraLight}"/>
Run Code Online (Sandbox Code Playgroud)

  • 这应该在文档中。我读过的所有文档都是模糊的,或者只有单一字体的名称,只有这个正确地描述了如何获取正确的字体名称。 (2认同)

Sus*_*ver 5

如果您Yellowtail-Regular.ttfhttp://www.1001freefonts.com/yellowtail.font使用,则该字体名称iOS将为Yellowtail

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

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

要确认您的iOS字体系列名称,请macOS打开您的.ttfusing,Font Book然后将使用macOS/ 的名称iOS是应用程序标题栏中的名称。