Android 为什么';使用Xamarin表单的iOS应用程序的t字体真棒显示?

Android 为什么';使用Xamarin表单的iOS应用程序的t字体真棒显示?,android,ios,xamarin,xamarin.forms,font-awesome,Android,Ios,Xamarin,Xamarin.forms,Font Awesome,我正在尝试向我的选项卡式页面选项卡添加字体很棒的图标。我遵循了我认为正确的步骤,能够为Xamarin.forms应用程序配置显示字体可怕的图标,但由于某些原因,这些图标显示在android应用程序上,而不是iOS应用程序上 我首先将字体awesome.ttf文件添加到android资产文件夹和iOS资源文件夹: 接下来,我更新了iOS的Info.plist文件,以便包含来自Font Awesome的.ttf文件: 然后我在App.xaml中配置了字体可怕图标的使用: 最后,我将所需的图标

我正在尝试向我的选项卡式页面选项卡添加字体很棒的图标。我遵循了我认为正确的步骤,能够为Xamarin.forms应用程序配置显示字体可怕的图标,但由于某些原因,这些图标显示在android应用程序上,而不是iOS应用程序上

我首先将字体awesome.ttf文件添加到android资产文件夹和iOS资源文件夹:

接下来,我更新了iOS的Info.plist文件,以便包含来自Font Awesome的.ttf文件:

然后我在App.xaml中配置了字体可怕图标的使用:

最后,我将所需的图标添加到它们的选项卡中:


替换App.xaml中的iOS值

<OnPlatform x:TypeArguments="x:String" 
                x:Key="FontAwesomeBrands">
                <On Platform="iOS"
                Value="FontAwesome5Brands-Regular" />
            </OnPlatform>

            <OnPlatform x:TypeArguments="x:String" 
                x:Key="FontAwesomeSolid">
                <On Platform="iOS" 
                Value="FontAwesome5Free-Solid" />
            </OnPlatform>

            <OnPlatform x:TypeArguments="x:String" 
                x:Key="FontAwesomeRegular">
                <On Platform="iOS" 
                Value="FontAwesome5Free-Regular" />
            </OnPlatform>
        <OnPlatform x:Key="FontAwesomeBrands"
                    x:TypeArguments="x:String">
            <On Platform="iOS"
                Value="FontAwesome5Brands-Regular" />
            <On Platform="Android"
                Value="FontAwesome5BrandsRegular400.otf#" />
        </OnPlatform>

        <OnPlatform x:Key="FontAwesomeSolid"
                    x:TypeArguments="x:String">
            <On Platform="iOS"
                Value="FontAwesome5Free-Solid" />
            <On Platform="Android"
                Value="FontAwesome5FreeSolid900.otf#" />
        </OnPlatform>

        <OnPlatform x:Key="FontAwesomeRegular"
                    x:TypeArguments="x:String">
            <On Platform="iOS"
                Value="FontAwesome5Free-Regular" />
            <On Platform="Android"
                Value="FontAwesome5FreeRegular400.otf#" />
        </OnPlatform>

替换App.xaml中的iOS值

<OnPlatform x:TypeArguments="x:String" 
                x:Key="FontAwesomeBrands">
                <On Platform="iOS"
                Value="FontAwesome5Brands-Regular" />
            </OnPlatform>

            <OnPlatform x:TypeArguments="x:String" 
                x:Key="FontAwesomeSolid">
                <On Platform="iOS" 
                Value="FontAwesome5Free-Solid" />
            </OnPlatform>

            <OnPlatform x:TypeArguments="x:String" 
                x:Key="FontAwesomeRegular">
                <On Platform="iOS" 
                Value="FontAwesome5Free-Regular" />
            </OnPlatform>
        <OnPlatform x:Key="FontAwesomeBrands"
                    x:TypeArguments="x:String">
            <On Platform="iOS"
                Value="FontAwesome5Brands-Regular" />
            <On Platform="Android"
                Value="FontAwesome5BrandsRegular400.otf#" />
        </OnPlatform>

        <OnPlatform x:Key="FontAwesomeSolid"
                    x:TypeArguments="x:String">
            <On Platform="iOS"
                Value="FontAwesome5Free-Solid" />
            <On Platform="Android"
                Value="FontAwesome5FreeSolid900.otf#" />
        </OnPlatform>

        <OnPlatform x:Key="FontAwesomeRegular"
                    x:TypeArguments="x:String">
            <On Platform="iOS"
                Value="FontAwesome5Free-Regular" />
            <On Platform="Android"
                Value="FontAwesome5FreeRegular400.otf#" />
        </OnPlatform>

在iOS上,请使用字体的“真实”名称而不是文件名

您可以通过右键单击windows上的
font-file->Properties->Details->Title
来检查这一点。例如,我测试了一个自定义字体文件,文件名为
font-awome 5 Free-Solid-900.otf
。如果将该值设置为文件名,则不起作用:

<OnPlatform x:TypeArguments="x:String" x:Key="FontAwesomeSolid">
    ...
    <On Platform="iOS" Value="Font Awesome 5 Free-Solid-900" />
</OnPlatform>

...
尝试获取自定义字体文件的倾斜度并删除“空格”

指定如下所示的值:

<OnPlatform x:TypeArguments="x:String" x:Key="FontAwesomeSolid">
    <On Platform="iOS" Value="FontAwesome5Free-Solid" />
</OnPlatform>


请参阅:

在iOS上,请使用字体的“真实”名称而不是文件名

您可以通过右键单击windows上的
font-file->Properties->Details->Title
来检查这一点。例如,我测试了一个自定义字体文件,文件名为
font-awome 5 Free-Solid-900.otf
。如果将该值设置为文件名,则不起作用:

<OnPlatform x:TypeArguments="x:String" x:Key="FontAwesomeSolid">
    ...
    <On Platform="iOS" Value="Font Awesome 5 Free-Solid-900" />
</OnPlatform>

...
尝试获取自定义字体文件的倾斜度并删除“空格”

指定如下所示的值:

<OnPlatform x:TypeArguments="x:String" x:Key="FontAwesomeSolid">
    <On Platform="iOS" Value="FontAwesome5Free-Solid" />
</OnPlatform>


请参阅:

在App.xaml中设置这些值对Android和iOS都有效

<OnPlatform x:TypeArguments="x:String" 
                x:Key="FontAwesomeBrands">
                <On Platform="iOS"
                Value="FontAwesome5Brands-Regular" />
            </OnPlatform>

            <OnPlatform x:TypeArguments="x:String" 
                x:Key="FontAwesomeSolid">
                <On Platform="iOS" 
                Value="FontAwesome5Free-Solid" />
            </OnPlatform>

            <OnPlatform x:TypeArguments="x:String" 
                x:Key="FontAwesomeRegular">
                <On Platform="iOS" 
                Value="FontAwesome5Free-Regular" />
            </OnPlatform>
        <OnPlatform x:Key="FontAwesomeBrands"
                    x:TypeArguments="x:String">
            <On Platform="iOS"
                Value="FontAwesome5Brands-Regular" />
            <On Platform="Android"
                Value="FontAwesome5BrandsRegular400.otf#" />
        </OnPlatform>

        <OnPlatform x:Key="FontAwesomeSolid"
                    x:TypeArguments="x:String">
            <On Platform="iOS"
                Value="FontAwesome5Free-Solid" />
            <On Platform="Android"
                Value="FontAwesome5FreeSolid900.otf#" />
        </OnPlatform>

        <OnPlatform x:Key="FontAwesomeRegular"
                    x:TypeArguments="x:String">
            <On Platform="iOS"
                Value="FontAwesome5Free-Regular" />
            <On Platform="Android"
                Value="FontAwesome5FreeRegular400.otf#" />
        </OnPlatform>

在App.xaml中设置这些值对Android和iOS都有效

<OnPlatform x:TypeArguments="x:String" 
                x:Key="FontAwesomeBrands">
                <On Platform="iOS"
                Value="FontAwesome5Brands-Regular" />
            </OnPlatform>

            <OnPlatform x:TypeArguments="x:String" 
                x:Key="FontAwesomeSolid">
                <On Platform="iOS" 
                Value="FontAwesome5Free-Solid" />
            </OnPlatform>

            <OnPlatform x:TypeArguments="x:String" 
                x:Key="FontAwesomeRegular">
                <On Platform="iOS" 
                Value="FontAwesome5Free-Regular" />
            </OnPlatform>
        <OnPlatform x:Key="FontAwesomeBrands"
                    x:TypeArguments="x:String">
            <On Platform="iOS"
                Value="FontAwesome5Brands-Regular" />
            <On Platform="Android"
                Value="FontAwesome5BrandsRegular400.otf#" />
        </OnPlatform>

        <OnPlatform x:Key="FontAwesomeSolid"
                    x:TypeArguments="x:String">
            <On Platform="iOS"
                Value="FontAwesome5Free-Solid" />
            <On Platform="Android"
                Value="FontAwesome5FreeSolid900.otf#" />
        </OnPlatform>

        <OnPlatform x:Key="FontAwesomeRegular"
                    x:TypeArguments="x:String">
            <On Platform="iOS"
                Value="FontAwesome5Free-Regular" />
            <On Platform="Android"
                Value="FontAwesome5FreeRegular400.otf#" />
        </OnPlatform>

另一种方法是将字体作为
嵌入资源添加到主项目中(抽象字体,而不是*.iOS),并将以下内容添加到
App.xaml.cs
顶部(命名空间上方):


此方法适用于Android和iOS。

另一种方法是在主项目(抽象项目,而不是*.iOS)中添加字体作为
嵌入式资源,并将以下内容添加到
App.xaml.cs
(命名空间上方):


这种方法适用于Android和iOS。

iOS不使用字体系列的文件系统名称,它使用postscript系列名称(这些名称在文件中编码),这些名称可通过
UIFont.FontNamesForFamilyName
获得,请查看我答案底部的代码()然后您可以临时修改。将其添加到Xamarin.iOS项目中,并从控制台/调试输出中获取您的姓名。或者使用macOS系统应用程序:“字体手册”,请参见我的回答:阅读本指南:。您不需要将字体文件添加到平台项目中。然后删除应用程序数据并重试。请不要将代码或错误发布为images@Saftpresse99我以前尝试过按照这些步骤进行操作,但这会在android项目中的MainActivity cs文件中引发错误:System.TypeLoadException:“无法使用令牌解析类型”iOS未使用字体系列的文件系统名称,它使用postscript族名称(这些名称在文件中编码),这些名称可通过
UIFont.FontNamesForFamilyName
获得,请查看我答案底部的代码()然后您可以使用temp。将其添加到Xamarin.iOS项目中,并从控制台/调试输出中获取您的姓名。或者使用macOS系统应用程序:“字体手册”,请参见我的回答:阅读本指南:。您不需要将字体文件添加到平台项目中。然后删除应用程序数据并重试。请不要将代码或错误发布为images@Saftpresse99我以前尝试过按照这些步骤进行操作,但这会导致android项目中的MainActivity cs文件中出现错误:System.TypeLoadException:“无法使用令牌解析类型”我尝试过,但仍然没有看到显示的字体图标。此外,实现此循环时,我无法输出名称。我正在从visual studio通过macincloud调试/运行iOS应用程序2019@aqwright31请检查字体文件生成操作,好吗?是不是
BundleResource
?我试过了,但还是看不到显示的字体图标。此外,实现此循环时,我无法输出名称。我正在从visual studio通过macincloud调试/运行iOS应用程序2019@aqwright31请检查字体文件生成操作,好吗?是不是
BundleResource