繁体   English   中英

如何使文本大小相对于IOS中的视图?

[英]How to make text size relative to view in IOS?

在XCode故事板中,我将ViewController设置为一堆stackview,并且所有内容都是相对的-视图尺寸表示为其他视图尺寸的分数,很多约束等。

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

在不同的宽高比下,它看起来确实可以接受,但是我注意到UILabels和TextViews的字体大小没有改变-包含其包含的视图的字体也没有变

因此,例如,如果我从iPhone切换到iPad预览,则UILabel的大小可能会急剧增加 ,但是其中包含的文本却保持不变...因此,它是大框中的微小文本。

所以...问题是:

有没有一种方法可以相对于包含文本的视图来表达字体/文本大小?

像这样:

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

谢谢。

我在为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)
            }
        }
    }
}

希望这个想法有所帮助。

尽可能增加UILabelsUITextFields文本字体大小,然后在“属性检查器”选项卡中为它们设置MinimumFontScaleMinimumFontSize属性,现在字体大小随着UITextFieldsUILabels大小的增加而增加。

UILabel
用于UILabel

UITextField
对于UITextField

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM