如何使用 Xcode Storyboard 为不同的设备设置不同的字体大小?

Posted

技术标签:

【中文标题】如何使用 Xcode Storyboard 为不同的设备设置不同的字体大小?【英文标题】:How to set different font sizes for different devices using Xcode Storyboard? 【发布时间】:2018-08-24 01:53:50 【问题描述】:

我想使用 Xcode Storyboard 为 iPhone 5、iPhone 6 Plus、iPhone 7 Plus 和 iPhone X 设置不同的字体大小。

谁能给点建议?

【问题讨论】:

可以在应用委托中设置全局字体... 看到这个对你有帮助:medium.com/@craiggrummitt/… 还有一个我使用的勾号是使用“AutoShrink”并选择最后一个“最小字体大小”使用值0.5,现在将您的最大字体大小分配给这个标签,你就完成了; ) 查看以下链接:- ***.com/a/53496831/5857254 希望对您有所帮助:) 【参考方案1】:

您无法在 IB 中完成此操作,您可以在运行时检测当前设备的大小并相应地设置字体,如果所有元素都具有相同的字体,您可以使用 .appearnce 设置全局字体

iPhone 6,7,X 没有字体变化,它必须是代码而不是 IB

【讨论】:

【参考方案2】:

使用Size-Class 并从标签属性的Attribute Inspector 添加字体大小变化。

这里有不同的可能变化,您可以使用 Size 类进行设置:

试试这个:

这是 iPhone 和 iPad 中字体大小变化的(结果)预览

更新

您期望的结果可能无法使用 IB(故事板),但您可以使用以下编程解决方案进行尝试:

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)


【讨论】:

对于 iPhone 6 ,7 和 X ,,, R,R 对于 ipad,字体和布局不能有不同的变化 @Sh_Khan - 欢迎您分享您的意见并提高此答案的质量。 :) 谢谢...@Krunal 请注意,只有为情节提要启用了“使用特征变体”时,才能添加字体变体。花了几个小时才发现...【参考方案3】:

注意:这不是一个简单的答案。但是,这可以根据约束来实现。

如果您使用自动布局,您可以通过情节提要自动调整字体。在UILabelAttributes 检查器中,有一个Autoshrink 部分,您可以在其中设置Minimum Font SizeMinimum Font Scale。因此,当您的标签通过约束调整自身大小时,它也会缩小您的字体以适应。

【讨论】:

如何设置约束?因为它不适合我

以上是关于如何使用 Xcode Storyboard 为不同的设备设置不同的字体大小?的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 6 Storyboard 为 UITextView 设置错误的帧大小

Xcode Storyboard - 如何在不同的 iPhone 屏幕尺寸之间更改元素的字体大小和位置

Xcode Storyboard 图像大小

Xcode 4.2.1 Storyboard 多对一视图返回

Xcode 5 - iOS - 如何在没有 Storyboard 或 XIB 的情况下在 Xcode 中创建视图控制器以及如何将其配置为 AppDelegate 作为根视图

如何使用非基础本地化在 Xcode 中预览 Storyboard