【问题标题】:How to set different font sizes for different devices using Xcode Storyboard?如何使用 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,现在将您的最大字体大小分配给这个标签,你就完成了; )
  • 查看以下链接:- stackoverflow.com/a/53496831/5857254 希望对您有所帮助:)

标签: ios fonts font-size xcode-storyboard


【解决方案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。因此,当您的标签通过约束调整自身大小时,它也会缩小您的字体以适应。

    【讨论】:

    • 如何设置约束?因为它不适合我
    猜你喜欢
    • 2017-09-15
    • 2017-08-24
    • 2016-09-19
    • 2015-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-20
    相关资源
    最近更新 更多