FontAwesome Label рендерер iOS проблемы - PullRequest
0 голосов
/ 05 сентября 2018

Я пытаюсь выяснить, как заставить этот пример Android работать с iOS:

using System;
using md.UserControls;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;

namespace md.iOS.CustomRenderers
{
    public class FontAwesomeLabelRenderer : LabelRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
        {
            base.OnElementChanged(e);

            if (e.OldElement == null)
            {
                Control.Typeface = Typeface.CreateFromAsset(Forms.Context.Assets,
                    "Fonts/" + FontAwesomeLabel.FontAwesomeName + ".ttf");
            }
        }
    }
}

Часть с проблемами это:

Control.Typeface = Typeface.CreateFromAsset(Forms.Context.Assets,
                    "Fonts/" + FontAwesomeLabel.FontAwesomeName + ".ttf");

Control.Typeface или просто Typeface вызывает некоторые проблемы (подчеркнуто красным).

Что такое гарнитура в iOS?

Надеюсь, что кто-то может помочь и заранее спасибо: -)

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Просто определите Style для меток, которые вы хотите иметь этот тип шрифта. Вы можете сделать это в XAML, определив FontFamily следующим образом:

<Style x:Key="NameOfYourLabelStyle" TargetType="Label">
    <Setter Property="FontFamily">
        <OnPlatform x:TypeArguments="x:String">
            <On Platform="Android">Fonts/FontAwesome.otf#FontAwesome</On>
            <On Platform="UWP">/Assets/Fonts/FontAwesome.otf#FontAwesome</On>
            <On Platform="iOS">FontAwesome</On>
        </OnPlatform>
    </Setter>
</Style>    

Убедитесь, что вы добавили файл шрифта * .otf (или * .ttf) в папку Resources и убедитесь, что вы добавили определенный ключ в файл info.plist, например:

<key>UIAppFonts</key>
<array>
    <string>Fonts/FontAwesome.otf</string>
</array>

ПРИМЕЧАНИЕ. В моем случае файл Fonts находится в каталоге Resources / Fonts /

enter image description here

РЕДАКТИРОВАТЬ: То, что на самом деле происходит под капотом при настройке FontFamily, это то же самое, что вы делаете в вашем рендерере. Проверьте UpdateFont метод в LabelRenderer в Xamarin.Forms github sources и ToTypeFace метод, вызываемый там.

0 голосов
/ 05 сентября 2018

Я бы посоветовал вам использовать Iconize вместо написания собственных пользовательских средств визуализации.

Это простой плагин, который позволяет использовать множество значков (например, Font Awesome).

App.xaml.cs (инициализация плагина):

Iconize.With(new FontAwesomeModule());

После того, как вы его инициализировали, вы можете использовать его так:

Страница XAML:

xmlns:iconize="clr-namespace:Plugin.Iconize;assembly=Plugin.Iconize"

<iconize:IconLabel Text="fa-info" />

C # Страница:

new IconLabel
{
    Text = "fa-info",
    FontSize = 55
};
...