[英]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)
}
}
}
}
希望这个想法有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.