在xamarin.iOS中的标签上应用自定义字体

时间:2018-05-18 09:35:15

标签: xaml xamarin xamarin.forms xamarin.ios

我想在所有标签和条目中应用蒙特塞拉特光字体样式,我是通过制作控件渲染器来实现的。 EntryRenderer正常工作,但LabelRenderer给出了带有消息的ArgumentNullException:Value不能为null。

  [assembly: ExportRenderer(typeof(Label), typeof(ExtendedLabelRenderer))]
namespace NewApp.iOS.Renderer
{
public class ExtendedLabelRenderer : LabelRenderer
{

    protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
    {
        base.OnElementChanged(e);
        if (e.NewElement != null)
        {

            Control.Font = UIFont.FromName("Montserrat-Light", 10f);

        }
    }
}
}

2 个答案:

答案 0 :(得分:0)

尝试以下代码。如果您未在XAML中指定font-family和size,它将更新。现在您也可以在XAML中设置。

 public class CustomLabelRender : LabelRenderer
{
    protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
    {
        base.OnElementChanged(e);
        if (Control != null)
        {
            if (e.NewElement != null)
            {
                if (!String.IsNullOrEmpty(Element.FontFamily))
                    Control.Font = UIFont.FromName(this.Element.FontFamily, (nfloat)e.NewElement.FontSize);
            }
        }
    }

}

答案 1 :(得分:0)

作为解决此问题的更简单方法,我想推荐免费的开源Forms9Patch NuGet包的Label元素和/或CustomFontEffect。它允许您将自定义字体作为嵌入式资源存储在Xamarin.Forms应用程序的跨平台项目(.NetStandard,PCL或共享库)中,然后将该字体的嵌入式资源ID设置为{ {1}}对于任何具有FontFamily属性的Xamarin.Forms元素。

FontFamily

完全披露:我是此套餐的作者。