我应该如何在iPhone 5S和6 Plus上处理不同的字体大小?

时间:2015-02-27 01:46:28

标签: ios iphone autolayout autoresize iphone-6-plus

对于5S,我们使用12pt的字体大小,但这在6 Plus上很小且无法读取。所以我们需要在6 Plus上将字体大小提高到15pt,但随后我们的填充和边距都搞砸了,因为我们在自动布局约束中使用了一些硬编码偏移。

我尝试删除6和6 plus发射图像以强制“缩放”,但这并不理想。我们确实希望我们的一些内容更小,以利用更高的分辨率。

我只是想知道其他iOS开发人员在做什么?你设置动态字体大小和填充?

我刚刚在Swift中编写了这个小帮助文件,但不确定它是否是最好的处理方式:

let DEVICE_WIDTH_5S: CGFloat    = 320.0   // 320x568
let DEVICE_WIDTH_6: CGFloat     = 375.0   // 375x667
let DEVICE_WIDTH_6PLUS: CGFloat = 414.0   // 414x736

let screenSize: CGRect = UIScreen.mainScreen().bounds

// Helper functions for fonts
func ProximaNova(style: String, size: CGFloat) -> UIFont {
    return dynamicFont("ProximaNova", style, size)
}
func BrandonGrotesque(style: String, size: CGFloat) -> UIFont {
    return dynamicFont("BrandonGrotesque", style, size)
}

private func dynamicFont(name: String, style: String, size: CGFloat) -> UIFont {
    var dynamicSize = size

    // Increase our font size for iPhone 6, 6+ and above
    if screenSize.width >= DEVICE_WIDTH_6PLUS {
        dynamicSize += 3.0
    } else if screenSize.width >= DEVICE_WIDTH_6 {
        dynamicSize += 2.0
    }

    return UIFont(name: "\(name)-\(style)", size: dynamicSize)!
}

1 个答案:

答案 0 :(得分:0)

我的一个项目中遇到了同样的问题。我们需要字体与设备完全相同的比例。所以这就是我为我的项目所做的。

#define IPHONE6PLUS_HEIGHT 736
#define AVENIR_LTPRO @"AvenirLTPro-Medium"
#define kFONTSize(sizeF) (([UIScreen mainScreen].bounds.size.height / IPHONE6PLUS_HEIGHT) * sizeF)
#define kFONT_AVNR_LTPRO(sizeF) [UIFont fontWithName:AVENIR_LTPRO size:kFONTSize(sizeF)]

使用它时,我已经提供了iPhone 6+字体大小。它节省了大量的编码和计算。这里,代码:

txtView.font = kFONT_AVNR_LTPRO(17.57f); 

它还将管理所有屏幕尺寸和未来设备的字体大小。 希望它可以帮助你.. :)