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

Posted

技术标签:

【中文标题】如何在不使用自动收缩的情况下使用不同 iPhone 尺寸的自动布局更改字体大小 [重复]【英文标题】:how to change font size using autolayout in different iPhone sizes without using autoshrink [duplicate] 【发布时间】:2018-05-18 07:04:43 【问题描述】:

如何使用自动布局更改不同 iPhone 尺寸的字体大小,例如 iPhone 5、5s、8,标签、文本字段的字体大小不同。

【问题讨论】:

使用自动收缩只会改变特定的标签而不是特定屏幕的所有字体。 【参考方案1】:

您可以使用Size classes 做到这一点。这个想法是您可以在不同的设备上以不同的方式或您喜欢的任何方式显示 UI 元素。这将使您能够以您喜欢的方式更改某些设备的字体属性。

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

【讨论】:

【参考方案2】:

以下 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)


【讨论】:

@Moritz - 你可能是对的,一半的解决方案是重复的。但在那个问题中,OP 想从 Storyboard(界面构建器)设置字体,但同样不可能,所以我建议他以编程方式进行。在这个问题中,OP希望以编程方式获得相同的结果。一般来说,我已经看到界面构建器请求的解决方案,并且在编程上被认为是不同的。我对这种情况感到困惑,所以我没有将其标记为重复。

以上是关于如何在不使用自动收缩的情况下使用不同 iPhone 尺寸的自动布局更改字体大小 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在不使用自动布局的情况下调整 iPhone 5 屏幕尺寸

SQL server2008 临时表tempdb如何自动释放存储空间

在 iPhone / iPad 上,如何在不使用图像的情况下制作带有凹槽的 Button?

如何在不使用 Xcode、iPhone 中的谷歌地图的情况下从地址获取纬度和经度

如何在不使用尺寸等级和情节提要的情况下创建适用于 iPhone 4 到 iPhone 6 Plus 的 XIB?

有没有一种方法可以在不使用 Xcode 11 在 iPhone 上构建 UI 的情况下测量 Swift 的性能? [关闭]