有没有办法缩放文本,以便无论设备大小是多少,它都会占用接近同一屏幕的空间?我发现,与iPhone相比,iPad尺寸设备上的文字相对于屏幕尺寸来说太小了。以下是我正在寻找的一个例子。请注意,文本百分比大小与设备屏幕大小相似。
答案 0 :(得分:26)
要为您拥有的标签设置约束,请参阅以下链接:How do you make a background image scale to screen size in swift?。我知道你可能没有使用Swift(我使用的是Objective-C),但第一个答案显示了如何在故事板中使用它。做同样的事情,但对于标签。然后,请参阅下图,将标签的自动缩小选项从“固定字体大小”更改为“最小字体比例”(参见下图)。希望这有帮助!
答案 1 :(得分:7)
我有自己的解决方案而且不是一次点击,但我发现它非常值得。
针对不同的屏幕尺寸测试某些字体大小,录制字体尺寸以及最相关的其他尺寸
这就是我的意思......
我会从正常的iPad屏幕开始,选择有效的字体大小。
因为我知道屏幕的整个高度将决定字体大小的舒适度,所以我会记录字体大小以及整个屏幕高度。
因此字体大小 50 ,高度 1024 。
然后,我切换到iPhone SE
这非常糟糕,所以我修正了字体大小:
录制后字体大小 25 ,高度 568 。
将计算器应用程序和找到常量与字体大小关联到高度(在我的情况下),给予或接受一点。
这就是我的意思:
我知道50件作品有1024件,而25幅件和568件作品一起使用。
除以50/1024给你.048828125。
乘以568等于27.734375,这对SE的字体大小来说有点胖。
重复该过程,但使用SE的值进行分割后生成.0440140845,并检查iPad的高度是否会产生45的字体大小,对于强大的iPad屏幕来说有点小。
所以我将商分成中间,得到一个大约0.46的数字。
使用此编号连接标签并更改 字体大小以编程方式。
首先,将标签拖动到插座集合中。我将我的连接命名为“headerLabels”,因为它们都位于屏幕的顶部。
然后,你可以偷我的代码,但不要用它赚太多钱;)
// Outlet collection of labels
@IBOutlet var headerLabels: [UILabel]!
// Who needs a short variable name when we can have a
// painfully lengthy one to describe the number we calculated?
let relativeFontConstant:CGFloat = 0.046
override func viewDidLoad() {
super.viewDidLoad()
// Should be in the viewDidLoad so it can load the same time as
// the view does.
// apply a font size to all the labels.
for label in headerLabels {
// multiply the height we based it on of the entire view
// to the number we calculated
label.font = label.font.withSize(self.view.frame.height * relativeFontConstant)
}
}
如果您有任何问题,评论,赞美或侮辱让我知道:)
答案 2 :(得分:5)
我遇到了同样的问题,我需要按照屏幕尺寸的增加按比例缩放文字。
自适应大小调整非常有限,因为您只能为大小类设置字体大小。拥有两个宽度选项的字体大小,紧凑和规则不适合我。
我编写了一个小型lib,可以处理针对不同屏幕尺寸的 UILabel 和 UITextView 的自动字体缩放。
您可以全局设置缩放,也可以设置 UILabel 和 UITextView 的特定实例。
在此处找到它:AMXFontAutoScale
答案 3 :(得分:5)
答案 4 :(得分:2)
在viewDidLoad函数中,使用以下代码时,我的行为举止得体:
(请注意,屏幕边界位于“点”而非“像素”中)
// Set the clock font size according to the height.
// Design was done on iPhone XR with height of 896 points and font size of 98.
if (UIScreen.main.bounds.height != 896). // Only need code if not on original design size.
{
let scaleFactor: Float = Float(UIScreen.main.bounds.height) / 896.0
let fontSize = CGFloat(98.0 * scaleFactor)
self.clock.font = self.clock.font.withSize(fontSize)
}
这使用的是固定宽度的字体“ Helvetica Neue”。由于某种原因,它并没有完全按比例放大,因此仍然比iPad上的目标要小一些,但足够接近。
答案 5 :(得分:2)
根据
的不同屏幕尺寸// iphone 5s,SE screen width 320
// iphone 6,6s,7,etc width 375
// iphone 7 plus, 8 plus, xs max,etc width 414
if (self.view.frame.width == 320) {
label.font = UIFont(name: label.font.fontName, size: 16)
} else if (self.view.frame.width == 375) {
label.font = UIFont(name: label.font.fontName, size: 21)
} else if (self.view.frame.width == 414) {
label.font = UIFont(name: label.font.fontName, size: 24)
}
答案 6 :(得分:1)
可以使用宽高比限制。将其添加到您的标签中。用于锚定标签的左边距和上边距的约束应该使编译器警告静音。
正如@VatsalManot所提到的,为初学者学习自适应大小。这是一个很好的链接:
http://www.raywenderlich.com/83276/beginning-adaptive-layout-tutorial
希望这有帮助! :)