Использование собственного шрифта для iOS приложения в раскадровках или файлах xib - PullRequest
0 голосов
/ 17 июня 2020

У меня есть рекомендации по шрифтам для моего приложения. Шрифт настраивается, и я знаю, как использовать собственный шрифт для приложения iOS.

enter image description here

У меня есть класс темы, в котором у меня есть определил все эти шрифты, например, следующие

struct Theme {
  static func getH4Font()  -> UIFont {
        return UIFont.init(name: "NeuePlakText-SemiBold", size: 14.0)!
    }
}

Чтобы применить этот шрифт к любой метке, мне нужно перетащить его IBOUTLET и установить шрифт соответствующим образом, но мне интересно, есть ли какие-либо способ установить эти шрифты напрямую через stroyboards или xib файлы. Например, как получилось, что я могу напрямую получить доступ к этим предопределенным шрифтам «H1, H2, H3» в раскадровках или файлах xib.

Я не хочу снова и снова выбирать собственный шрифт, вес и размер для каждой метки. Любая помощь приветствуется.

Ответы [ 2 ]

1 голос
/ 17 июня 2020

Вы можете достичь этого, создав подкласс UILabel, и следующий пример может вам помочь.

class CustomLabel: UILabel
{
    @IBInspectable var textFont:Int = 0

    required init?(coder aDecoder: NSCoder)
    {
        super.init(coder: aDecoder)
        initializeLabel()
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
        initializeLabel()
    }

    func initializeLabel()
    {
       self.font = FontType.getFont(rawValue: textFont)
    }
}

enum FontType: Int
{
    case Default = 0, Small, Large

    var fount: UIFont
    {
        switch self
        {
            case .Default:
                return UIFont.systemFont(ofSize: 40)
            case .Small:
                return UIFont.systemFont(ofSize: 80)
            case .Large:
                return UIFont.systemFont(ofSize: 100)
        }
    }

    static func getFont(rawValue: Int) -> UIFont
    {
        if let fontType = FontType(rawValue: rawValue)
        {
            return fontType.fount
        }
        return FontType.Default.fount
    }
}

Кроме того, вам нужно будет установить свойство в XIB / Storyboard:

enter image description here

enter image description here

Надеюсь, это вам поможет.

0 голосов
/ 17 июня 2020

К сожалению, нет возможности установить пользовательские стили в Interface Builder, но вы могли бы создать подкласс UILabel для каждого стиля и заставить этот подкласс применять стиль к самому себе.

Вы также можете создать подкласс, который принимает строковый параметр с помощью IBInspectable, поэтому вы можете установить его из Interface Builder и использовать этот параметр для установки стиля.

Styli sh делает что-то подобное.

...