如何使用 Xcode Storyboard 为不同的设备设置不同的字体大小?
How to set different font sizes for different devices using Xcode Storyboard?
我想使用 Xcode 故事板为 iPhone 5、iPhone 6 Plus、iPhone 7 Plus 和 iPhone X 设置不同的字体大小。
谁能给点建议?
您无法在 IB 中完成此操作,您可以在运行时检测当前设备的大小并相应地设置字体,如果所有元素都具有相同的字体,您可以使用 .appearnce 设置全局字体
IPhone 6,7,X 没有字体变化,它必须在代码中而不是 IB
使用 Size-Class 并为标签 属性 的 Attribute Inspector
中的字体添加大小变化。
这里有不同的可能变化,你可以用Size设置class:
试试这个:
这是 font-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)
}
注意:这不是一个直截了当的答案。但是,这可以基于约束来实现。
如果您使用的是自动版式,则可以通过故事板自动缩放字体。在 UILabel
的 Attributes
检查器中,有一个 Autoshrink
部分,您可以在其中设置 Minimum Font Size
或 Minimum Font Scale
。因此,当您的标签通过约束自行调整大小时,它也会缩小您的字体以适应。
我想使用 Xcode 故事板为 iPhone 5、iPhone 6 Plus、iPhone 7 Plus 和 iPhone X 设置不同的字体大小。
谁能给点建议?
您无法在 IB 中完成此操作,您可以在运行时检测当前设备的大小并相应地设置字体,如果所有元素都具有相同的字体,您可以使用 .appearnce 设置全局字体
IPhone 6,7,X 没有字体变化,它必须在代码中而不是 IB
使用 Size-Class 并为标签 属性 的 Attribute Inspector
中的字体添加大小变化。
这里有不同的可能变化,你可以用Size设置class:
试试这个:
这是 font-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)
}
注意:这不是一个直截了当的答案。但是,这可以基于约束来实现。
如果您使用的是自动版式,则可以通过故事板自动缩放字体。在 UILabel
的 Attributes
检查器中,有一个 Autoshrink
部分,您可以在其中设置 Minimum Font Size
或 Minimum Font Scale
。因此,当您的标签通过约束自行调整大小时,它也会缩小您的字体以适应。