Замените шрифт для каждого UILabel в приложении - PullRequest
0 голосов
/ 30 июня 2019

Я пытаюсь изменить шрифт, сделав расширение для UILabel

extension UILabel{
    var defaultFont: UIFont? {
        get { return self.font }
        set {
            let oldFontSize = self.font.pointSize
            let oldFontName = self.font.fontName
            let newFontName  = newValue?.fontName
            self.font = UIFont(name: newFontName!, size: oldFontSize)  
        }
    }
}

, затем позвоните

UILabel.appearance().defaultFont = UIFont.init(name: "My Font", size: 5)

Но всегда self.font есть nil с использованием xcode 10 swift 4.2

Изменить: Теперь, после изменения версии Swift на Swift3, она работает хорошо, тогда проблема в Swift4.

Есть ли решение или альтернативный способ сделать это?

Ответы [ 5 ]

0 голосов
/ 30 июня 2019

Я считаю наиболее полезным добавить функцию style(as style: TypographyStyle) в расширение UILabel, где TypographyStyle - это определенное мной перечисление, которое содержит множество свойств стиля, включая шрифт. Я также создал вспомогательный init для UILabel, который использует случай TypographyStyle и вызывает style(as:), чтобы стиль автоматически применялся при создании метки.

extension UILabel {
    convenience init(style: TypographyStyle) {
        self.init()

        self.style(as: style)
    }

    func style(as style: TypographyStyle) {
        self.font = UIFont(name: style.fontName, size: style.fontSize)
    }
}

enum TypographyStyle {
    case body, h1, h2, h3

    var font: UIFont {
        switch self {
        // here you can return different fonts for the different styles if you like
        default:
            return UIFont(name: "AvenirNext", size: 16)
        }
    }
}

// Usage
let label = UILabel(style: .body)
0 голосов
/ 30 июня 2019

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

public class CustomLabel: UILabel {
    override public var font: UIFont! {
        get { return super.font }
        set {
            super.font = UIFont(name: "Font-Name", size: super.font.pointSize)
        }
    }
}
0 голосов
/ 30 июня 2019

Стандартный способ сделать это - создать свой собственный класс UILabel и использовать этот класс везде, где вам нужен этот шрифт по умолчанию.например,

class MyFontLabel: UILabel {

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

        self.commonInit()
    }

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

        self.commonInit()
    }

    private func commonInit() {
        self.font = UIFont(name: "My Font", size: self.font.pointSize)
    }
}
0 голосов
/ 30 июня 2019

Поместите это на appDelegate в didFinishLaunchingWithOptions метод:

UILabel.appearance().font = UIFont(name: "your font name", size: UILabel.appearance().font.pointSize)
0 голосов
/ 30 июня 2019

попробуйте это: это appDelegate -> didFinishLaunch:

UILabel.appearance().font = UIFont("your font name", size: 15)
...