LabelCustomRenderer

时间:2018-07-06 15:39:06

标签: xamarin.forms xamarin.ios label font-size custom-renderer

我为标签制作了自定义渲染器,以显示html格式的文本。

问题在于,与Android不同,IOS中的文本很小,我找不到改变它的方法。

我的代码

IOS

[assembly:ExportRenderer(typeof(HtmlFormattedLabel), typeof(HtmlFormattedLabelRenderer))]
namespace YmoApp.iOS
{
    public class HtmlFormattedLabelRenderer : LabelRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
        {
            base.OnElementChanged(e);

            var view = (HtmlFormattedLabel)Element;

            if (view == null) return;

            var attr = new NSAttributedStringDocumentAttributes();
            var nsError = new NSError();
            attr.DocumentType = NSDocumentType.HTML;

            var myHtmlData = NSData.FromString(view.Text, NSStringEncoding.UTF8);

            Control.AttributedText = new NSAttributedString(myHtmlData, attr, ref nsError);

        }
    }
}

Android

[assembly:ExportRenderer(typeof(HtmlFormattedLabel), typeof(HtmlFormattedLabelRenderer))]
namespace YmoApp.Droid
{
    public class HtmlFormattedLabelRenderer : LabelRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
        {
            base.OnElementChanged(e);

            var view = (HtmlFormattedLabel)Element;
            if (view == null) return;

            Control.SetText(Html.FromHtml(view.Text.ToString()), TextView.BufferType.Spannable);
        }
    }
}

PCL

var descriptionLabel = new HtmlFormattedLabel()
{
    Text = "<http><body style='font-size; 20px'><p style='text-align: justify; font-family: Arial, Helvetica, sans-serif; font-size: 14px'>"
                + _imovel.Anuncio.Descricao + "</p></body></http>",
    Margin = new Thickness(20, 0)
};

descriptionLabel.FontSize = 14;

似乎什么都没有生效。

2 个答案:

答案 0 :(得分:1)

我想您的问题在于将格式化的字体大小设置为像素高度。 iOS非常重视像素值,在视网膜显示屏上呈现时,14 px的字体大小最终会变得很小。

尝试使用与分辨率无关的字体​​大小,您应该会很好。

这对我来说也很不对劲:

<body style='font-size; 20px'>

答案 1 :(得分:0)

错误出现在<body style='font-size; 20px'>中。

;替换为: