如何在IOS中相对于视图制作文字大小?

时间:2018-04-20 21:09:15

标签: ios xcode text autolayout size

在XCode故事板中,我将ViewController设置为一堆stackviews,一切都是相对的 - 视图尺寸表示为其他视图尺寸的分数......许多约束等。

这是为了确保它在所有IOS设备上看起来都不错(无论如何都是手机和Ipads)。

在不同的宽高比下看起来确实可以接受,但我注意到我的UILabel和TextView的字体大小没有变化 - 没有获得 LARGER 及其包含的视图。< / p>

因此,例如,如果我从iPhone切换到iPad预览,UILabel大小可能急剧增加,但它包含的文本保持不变...所以它&#39;一个大盒子里的小文字。

所以......问题是:

有没有办法将字体/文字大小表示为相对于包含文本的视图?

这样的事情:

text.height = 0.7 * container.height
text.width = maintain aspect ratio with height

感谢。

2 个答案:

答案 0 :(得分:1)

我在为iPhone和iPad设计应用程序时遇到了同样的问题,我尝试了这个解决方案,但工作正常,但需要花一些时间来管理。您需要创建一个自定义标签类,它将继承自UILabel类。在你的awakeFromNib函数中你可以检查设备,你可以将任何字体大小乘以你对iPhone和iPad感觉良好的比例。您还可以添加不同iPhone尺寸的检查。如果您希望对不同的标签使用不同的比率,请在自定义类中创建名为dynamicRatio的IBDesignable属性,并使用该值来增加字体。你可以玩这个。我们努力将类分配给您在设计过程中用于并行的所有标签和设置属性。

以下是我正在使用的代码集。

import UIKit

class MyLabel: UILabel {

    @IBInspectable var autoFont: Bool = false
    @IBInspectable var fontSize: CGFloat = 0

    override open func awakeFromNib() {
        super.awakeFromNib()

        let baseHeight: CGFloat = (((UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiom.pad)) ?1024.0:568.0)

        if autoFont == true {
            if (isDevice() == DEVICES.iPhoneX) {
                let size: CGFloat = 667.0 * (fontSize / baseHeight)
                self.font = UIFont(name: self.font!.fontName, size: size)
            } else {
                let size: CGFloat = UIScreen.main.bounds.size.height * (fontSize / baseHeight)
                self.font = UIFont(name: self.font!.fontName, size: size)
            }
        }
    }
}

希望这个想法有所帮助。

答案 1 :(得分:0)

尽可能增加UILabelsUITextFields的文字字体大小,然后在“属性检查器”标签中为它们设置MinimumFontScaleMinimumFontSize属性,现在字体大小增加当UITextFieldsUILabels尺寸增加时。

<强>的UILabel
for UILabel

<强>的UITextField
for UITextField