【问题标题】:How To Add Dynamic Font Size about Multi Device in Xcode Story Board如何在 Xcode Story Board 中添加有关多设备的动态字体大小
【发布时间】:2016-07-01 06:56:15
【问题描述】:

我在 storyBoard 中添加了 autoLayout(w:Any,h:Any)

但由于字体大小固定,所有设备的字体大小都相同 (4、4.7、5.5英寸)

4 英寸的看起来不错。但是5.5寸,太小了

我想在任何设备上动态增加和减小 UIlabel 字体大小。

有什么想法吗?

【问题讨论】:

    标签: xcode swift responsive-design storyboard size


    【解决方案1】:

    我找到了解决方案

    我做了一门课

    class UILabelDeviceClass : UILabel {
    
    @IBInspectable var iPhoneFontSize:CGFloat = 0 {
        didSet {
            overrideFontSize(iPhoneFontSize)
        }
    }
    
    func overrideFontSize(fontSize:CGFloat){
        let currentFontName = self.font.fontName
        var calculatedFont: UIFont?
        let bounds = UIScreen.mainScreen().bounds
        let height = bounds.size.height
        switch height {
        case 480.0: //Iphone 3,4,SE => 3.5 inch
            calculatedFont = UIFont(name: currentFontName, size: fontSize * 0.7)
            self.font = calculatedFont
            break
        case 568.0: //iphone 5, 5s => 4 inch
            calculatedFont = UIFont(name: currentFontName, size: fontSize * 0.8)
            self.font = calculatedFont
            break
        case 667.0: //iphone 6, 6s => 4.7 inch
            calculatedFont = UIFont(name: currentFontName, size: fontSize * 0.9)
            self.font = calculatedFont
            break
        case 736.0: //iphone 6s+ 6+ => 5.5 inch
            calculatedFont = UIFont(name: currentFontName, size: fontSize)
            self.font = calculatedFont
            break
        default:
            print("not an iPhone")
            break
        }
    
    }
    

    }

    然后,设置类

    然后,设置值

    编码愉快!

    【讨论】:

    • 很好的解决方案,但不考虑横向。也许你可以使用height = max(bounds.size.height, bounds.size.width)
    【解决方案2】:

    检查屏幕大小并据此操作字体大小:

    let screenSize = UIScreen.mainScreen().bounds.size
    
    if screenSize.height < 568 {
        //Set font size for 4
    } else if screenSize.height < 568 {
        //Set font size for 5
    } else if screenSize.height < 568 {
        //Set font size for 6
    } else {
        //Set font size for 6+
    }
    

    更新:

    扩展 UILabel 类来设置你的标签:

    extension UILabel { 
        func setupLabelDynamicSize(size size:CGFloat) {
            let screenSize = UIScreen.mainScreen().bounds.size
    
            if screenSize.height < 568 {
                //Set self.font equal size
            } else if screenSize.height < 568 {
                //Set self.font equal size + 1
            } else if screenSize.height < 568 {
                //Set self.font equal size + 2
            } else {
                //Set self.font equal size + 3
            }
        }
    }
    

    然后,无论您有想要动态大小的标签,只需调用:

    labelObject.setupLabelForDynamicSize(size: 14)
    

    【讨论】:

    • 我是这样想的。但我不能使用这个。因为我有 20 个视图和更多标签。这个标签大小都不同。
    • 这是一个非常好的主意。但我还有 200 多个标签。我必须为所有这些标签调用此方法吗?
    • 如果应用程序中的所有标签都具有相同的文本大小,您可以覆盖 UILabel 初始化程序并在那里调用它
    【解决方案3】:

    不,您不能只为 iPhone 5.5 配置尺寸等级。尺寸等级无法区分 iPhone 5、6 和 6Plus。

    只有 1 个边缘保护壳仅支持 iPhone 5.5 横向: regular width, compact height: 5.5" iPhone in Landscape

    您可以做到这一点的唯一方法是在您的代码中检查设备大小!

    【讨论】:

    • 直截了当不是一个很好的答案。在这种情况下,无论如何都是可能的。只需检查手机大小并根据手机大小发送代码中的字体大小
    • 是的,我知道你可以在代码中查看,但是@Yoohogyun 问道:How can do it in storyboard ?无论如何,我会更新我的答案
    • 那么在故事板中配置是不可能的吗?但在这种情况下,我有太多的 UIlabel。所以如果我使用代码,那么代码长度会太长。如果我使用代码,我该如何缩短编码?有什么想法吗?
    • 我有 1 个想法,但不是很好。子类 UILabel,添加属性 customTag 并为此属性创建 IBDesignable。在界面生成器中,为 UILabel (s) 设置相同的customTag 具有相同的字体大小。在您的代码中,检查customTag 并设置适当的字体大小。但这不是很好!
    【解决方案4】:

    使用 xcode 7.3,您可以在属性检查器中单击添加“+”来选择每个设备的字体大小

    【讨论】:

    • 不,这不起作用。这仅适用于不同的尺寸等级。你无法区分 iPhone5 屏幕尺寸和 iPhone6 屏幕尺寸。
    • @Andrej 对。我的问题是相同大小的课程
    猜你喜欢
    • 2015-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    • 2014-10-09
    • 2011-09-05
    • 2013-06-18
    • 2020-07-30
    相关资源
    最近更新 更多