Swift 中针对不同 iOS 设备的不同 UIFont 大小

Bha*_*ddy 4 uilabel uifont swift

我正在为 iPhone 系列开发基于 swift 的 iOS 应用程序。我的应用程序支持从 iPhone 4s 到 iPhone X 的所有设备。在 iPhone 4s 等较小设备中,标签看起来更大,因为我为高端设备添加了更大的字体大小。有人可以帮助我如何根据设备缩放字体。我尝试了具有紧凑/常规宽度和紧凑/常规高度的尺寸类别,但它们都没有帮助我。非常感激你的帮助

故事板字体设置 在不同设备上渲染应用程序

Car*_*van 5

以编程方式

在不使用故事板的情况下,我可以根据屏幕宽度简单地更改字体大小,如下所示:

func dynamicFontSize(_ FontSize: CGFloat) -> CGFloat {
    let screenWidth = UIScreen.main.bounds.size.width
    let calculatedFontSize = screenWidth / 375 * FontSize
    return calculatedFontSize
}
Run Code Online (Sandbox Code Playgroud)

并可用作:

myLabel.font = UIFont(name: "Helvetica", size: dynamicFontSize(20))
Run Code Online (Sandbox Code Playgroud)

请注意,在dynamicFontSize函数中,数字375只是字体大小计算的基础,因为我通常在 iPhone 8 上测试我的应用程序(即字体大小 18在 iPhone 8 上实际上是18,因为其实际宽度为 375)。该数字可以根据您的喜好进行更改。

故事板

如果您坚持使用情节提要,您可以创建一个新的 swift 文件子类化UILabel并使用@IBInspectable如下所示:

import UIKit

class UILabelFontClass: UILabel {

    @IBInspectable var DynamicFontSize: CGFloat = 0 {
        didSet {
            overrideFontSize(FontSize: DynamicFontSize)
        }
    }

    func overrideFontSize(FontSize: CGFloat){
        let fontName = self.font.fontName
        let screenWidth = UIScreen.main.bounds.size.width
        let calculatedFontSize = screenWidth / 375 * FontSize
        self.font = UIFont(name: fontName, size: calculatedFontSize)
    }
}
Run Code Online (Sandbox Code Playgroud)

UILabelFontClass标签的 内部故事板子类:子类化_UILabelFontClass

现在在属性检查器中,您可以设置字体大小: 属性_检查器_设置_字体大小