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?
谁能看到我想念的东西吗?
最终的工作细节如下:
字体位置:
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}" />