如何使用 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】:注意:这不是一个简单的答案。但是,这可以根据约束来实现。
如果您使用自动布局,您可以通过情节提要自动调整字体。在UILabel
的Attributes
检查器中,有一个Autoshrink
部分,您可以在其中设置Minimum Font Size
或Minimum Font Scale
。因此,当您的标签通过约束调整自身大小时,它也会缩小您的字体以适应。
【讨论】:
如何设置约束?因为它不适合我以上是关于如何使用 Xcode Storyboard 为不同的设备设置不同的字体大小?的主要内容,如果未能解决你的问题,请参考以下文章
Xcode 6 Storyboard 为 UITextView 设置错误的帧大小
Xcode Storyboard - 如何在不同的 iPhone 屏幕尺寸之间更改元素的字体大小和位置
Xcode 4.2.1 Storyboard 多对一视图返回
Xcode 5 - iOS - 如何在没有 Storyboard 或 XIB 的情况下在 Xcode 中创建视图控制器以及如何将其配置为 AppDelegate 作为根视图