如何在不使用自动收缩的情况下使用不同iPhone尺寸的自动布局更改字体大小

时间:2018-05-18 07:04:43

标签: ios swift xcode autolayout ios-autolayout

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

2 个答案:

答案 0 :(得分:0)

您可以使用Size classes执行此操作。我们的想法是,您可以在不同的设备上以不同的方式显示UI元素,或者无论如何。这样您就可以按照自己喜欢的方式更改某些设备的字体属性。

网上有很多很好的教程,还有官方文档,你可以在这里找到: https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/AutolayoutPG/Size-ClassSpecificLayout.html

答案 1 :(得分:0)

以下UIDevice扩展可能对您有帮助(我不建议使用这种代码行为。您需要每次更新它,启动新设备,与现有屏幕尺寸不匹配。):

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)

}