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

时间:2018-03-15 09:56:50

标签: ios xcode-storyboard

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

有人可以提供任何建议吗?

Example is shown in the image where i was stuck.

3 个答案:

答案 0 :(得分:12)

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

以下是不同的可能变体,您可以使用Size class设置:

enter image description here

enter image description here

试试这个:

enter image description here

enter image description here

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

enter image description here

更新

您可能无法使用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)

}

答案 1 :(得分:2)

你无法在IB中完成此任务,你可以在运行时检测当前设备的大小并相应地设置字体,如果所有元素都有相同的字体你可以使用。出现设置全局字体

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

答案 2 :(得分:2)

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

如果您使用自动布局,则可以通过故事板自动获得字体比例。在Attributes的{​​{1}}检查器中,有一个UILabel部分,您可以在其中设置AutoshrinkMinimum Font Size。因此,当您的标签通过约束调整自身大小时,它也会缩小您的字体以适应。enter image description here