Ios 如何在不使用autoshrink的情况下使用autolayout在不同大小的iPhone中更改字体大小

Ios 如何在不使用autoshrink的情况下使用autolayout在不同大小的iPhone中更改字体大小,ios,swift,xcode,autolayout,ios-autolayout,Ios,Swift,Xcode,Autolayout,Ios Autolayout,如何使用autolayout为不同的iPhone大小更改字体大小,如iPhone 5、5s、8,标签、文本字段的字体大小不同。您可以使用大小类来更改字体大小。其思想是,您可以在不同的设备上以稍微不同的方式显示UI元素,或者以您喜欢的任何方式显示UI元素。这将使您能够以自己喜欢的方式更改某些设备的字体属性 网上有很多很好的教程和官方文档,您可以在这里找到: 遵循UIDevice extension可能会对您有所帮助(我不建议使用这种代码行为。您需要在每次启动新设备时更新它,因为它与现有屏幕大小不匹

如何使用autolayout为不同的iPhone大小更改字体大小,如iPhone 5、5s、8,标签、文本字段的字体大小不同。

您可以使用
大小类来更改字体大小。其思想是,您可以在不同的设备上以稍微不同的方式显示UI元素,或者以您喜欢的任何方式显示UI元素。这将使您能够以自己喜欢的方式更改某些设备的字体属性

网上有很多很好的教程和官方文档,您可以在这里找到:

遵循UIDevice extension可能会对您有所帮助(我不建议使用这种代码行为。您需要在每次启动新设备时更新它,因为它与现有屏幕大小不匹配):


使用“自动收缩”只会更改特定的标签,而不会更改特定屏幕的所有字体。@Moritz-您可能是对的,解决方案的一半是重复的。但在那个问题上,OP想从Storyboard(interface builder)设置字体,但同样不可能,所以我建议他以编程方式进行设置。在这个问题上,OP希望在程序上得到相同的结果。一般来说,我已经看到了interface builder所要求的解决方案,并且在编程上被认为是不同的。我对这种情况感到困惑,所以我没有将其标记为重复。
extension UIDevice {


    enum DeviceType: String {
        case iPhone4_4S = "iPhone 4 or iPhone 4S"
        case iPhones_5_5s_5c_SE = "iPhone 5, iPhone 5s, iPhone 5c or iPhone SE"
        case iPhones_6_6s_7_8 = "iPhone 6, iPhone 6S, iPhone 7 or iPhone 8"
        case iPhones_6Plus_6sPlus_7Plus_8Plus = "iPhone 6 Plus, iPhone 6S Plus, iPhone 7 Plus or iPhone 8 Plus"
        case iPhoneX = "iPhone X"
        case unknown = "iPadOrUnknown"
    }

    var deviceType: DeviceType {
        switch UIScreen.main.nativeBounds.height {
        case 960:
            return .iPhone4_4S
        case 1136:
            return .iPhones_5_5s_5c_SE
        case 1334:
            return .iPhones_6_6s_7_8
        case 1920, 2208:
            return .iPhones_6Plus_6sPlus_7Plus_8Plus
        case 2436:
            return .iPhoneX
        default:
            return .unknown
        }
    }
}


// Get device type (with help of above extension) and assign font size accordingly.
let label = UILabel()

let deviceType = UIDevice.current.deviceType

switch deviceType {

case .iPhone4_4S:
    label.font = UIFont.systemFont(ofSize: 10)

case .iPhones_5_5s_5c_SE:
    label.font = UIFont.systemFont(ofSize: 12)

case .iPhones_6_6s_7_8:
    label.font = UIFont.systemFont(ofSize: 14)

case .iPhones_6Plus_6sPlus_7Plus_8Plus:
    label.font = UIFont.systemFont(ofSize: 16)

case .iPhoneX:
    label.font = UIFont.systemFont(ofSize: 18)

default:
    print("iPad or Unkown device")
    label.font = UIFont.systemFont(ofSize: 20)

}