我的应用程序中有很多标签。更改所有字体大小的最佳方法是什么?例如:

func changeFontSize()
{
    var coefficient = 1.0
    switch device{
        case iPadPro:
            coefficient = 1.2
        case iPhone5:
            coefficient = 0.9
        case iPhone4:
            coefficient = 0.8
        ...
        updateFontSizeInApplication(coefficient)
}

这可能吗?是否应该根据设备在每个控制器上的每个标签上设置系数?

最佳答案

尝试对UIFont进行扩展,并实现将按比例返回所有应用字体的字体的方法。

extension UIFont {
    class func appFontName(size: CGFloat) -> UIFont {
        guard let font = UIFont(name: "YourFontName", size: scaledSize(size)) else {
            return UIFont.systemFontOfSize(scaledSize(size))
        }
        return font
    }

    private class func scaledSize(size: CGFloat) -> CGFloat {
        let coefficient = 1
        switch device { // pseudocode for checking device type
        case iPadPro:
            coefficient = 1.2
        case iPhone5:
            coefficient = 0.9
        case iPhone4:
            coefficient = 0.8
        }
        return size * coefficient
    }
}
用法示例:
let textField = UITextField()
textField.font = UIFont.appFontName(16) // on iPad it will be ~19
希望它会启发你;)

10-07 20:43