Есть ли способ добавить пространство имен UIKit в общий проект форм Xamarin? - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть небольшой скрипт, который я обычно запускаю в XF, чтобы проверить добавление новых имен шрифтов:

using System.Diagnostics;
using System.Linq;
using UIKit;
using Xamarin.Forms;

namespace Japanese
{
    public partial class App : Application
    {

        public static void ShowFonts()
        {

            foreach (var fontFamily in UIFont.FamilyNames.OrderBy(x => x).ToArray())
            {
                var fontNames = UIFont.FontNamesForFamilyName(fontFamily);
                if (fontNames.Any())
                {
                    foreach (var fontName in fontNames)
                    {
                        var font = UIFont.FromName(fontName, UIFont.LabelFontSize);
                        if (font != null)
                            Debug.WriteLine("Family: " + fontFamily + " - " + fontName + "  " + font);
                    }
                }
                else
                {
                    var font = UIFont.FromName(fontFamily, UIFont.LabelFontSize);
                    Debug.WriteLine("Family: " + fontFamily + "  " + font);
                }
            }
        }
    }
}

Я думал, что раньше он работал нормально, но теперь есть проблема, поскольку UIKit не найден. Есть ли способ, которым я могу временно добавить это в свой общий проект или каким-либо другим способом запустить этот скрипт?

Ответы [ 2 ]

1 голос
/ 15 апреля 2020

Вы не должны добавлять ссылку на UIKit в ваш общий проект. Так как это часть кода отладки, вы можете легко добавить его в один из классов вашего iOS проекта. Например, в вашей AppDelegate.cs:

public override bool FinishedLaunching(UIApplication uiApplication, NSDictionary launchOptions)
{
            Forms.Init();
            LoadApplication(app);

#if DEBUG
            foreach (var fontFamily in UIFont.FamilyNames.OrderBy(x => x).ToArray())
            {
                var fontNames = UIFont.FontNamesForFamilyName(fontFamily);
                if (fontNames.Any())
                {
                    foreach (var fontName in fontNames)
                    {
                        var font = UIFont.FromName(fontName, UIFont.LabelFontSize);
                        if (font != null)
                            Debug.WriteLine("Family: " + fontFamily + " - " + fontName + "  " + font);
                    }
                }
                else
                {
                    var font = UIFont.FromName(fontFamily, UIFont.LabelFontSize);
                    Debug.WriteLine("Family: " + fontFamily + "  " + font);
                }
            }
        }
#endif

        return base.FinishedLaunching(uiApplication, launchOptions);
}

Если вы добавите вокруг нее директиву компилятора #if DEBUG, вы также будете уверены, что если она запускается только при выполнении отладочной сборки.

Вы также заметили новую функцию Embedded Fonts ? Это может упростить использование шрифтов в целом.

0 голосов
/ 15 апреля 2020

Да и нет.

По умолчанию Xamarin.Forms создаст ваш общий проект в виде. NET Стандартная библиотека. Поскольку UIKit не является частью. NET Standard, вы не можете использовать его там.

Однако иногда go вы можете выбрать, хотите ли вы использовать. NET Стандартная библиотека или общий проект для обмена кодом. Вы все еще можете создать его вручную, просто он недоступен как часть шаблона по умолчанию. Использование общего проекта для совместного использования кода позволяет вам использовать в нем UIKit (просто пометьте его должным образом директивой #if).

Учитывая, следует или не следует знать, что многие люди скажут, что вам не следует делать это. Но я хотел бы отметить, что человек, который изобрел Xamarin - Мигель де Иказа, сказал, что в команде Xamarin ведутся споры о том, что лучше, и что он лично будет использовать общий проект. Вы не производите код для «должен и не должен», но для того, чтобы заставить его работать и минимизировать долгосрочные затраты, и в каждой теории MVVM вы прочтете, что не следует применять его литературно, если он не может помочь вам в создании Ваш проект лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...