按屏幕大小缩放文本标签

时间:2015-03-27 19:41:43

标签: ios xcode swift

有没有办法缩放文本,以便无论设备大小是多少,它都会占用接近同一屏幕的空间?我发现,与iPhone相比,iPad尺寸设备上的文字相对于屏幕尺寸来说太小了。以下是我正在寻找的一个例子。请注意,文本百分比大小与设备屏幕大小相似。

实施例

enter image description here enter image description here

7 个答案:

答案 0 :(得分:26)

要为您拥有的标签设置约束,请参阅以下链接:How do you make a background image scale to screen size in swift?。我知道你可能没有使用Swift(我使用的是Objective-C),但第一个答案显示了如何在故事板中使用它。做同样的事情,但对于标签。然后,请参阅下图,将标签的自动缩小选项从“固定字体大小”更改为“最小字体比例”(参见下图)。希望这有帮助!

Changing Font Size

答案 1 :(得分:7)

我有自己的解决方案而且不是一次点击,但我发现它非常值得。

第1步:

针对不同的屏幕尺寸测试某些字体大小录制字体尺寸以及最相关的其他尺寸

这就是我的意思......

我会从正常的iPad屏幕开始,选择有效的字体大小。

enter image description here

因为我知道屏幕的整个高度将决定字体大小的舒适度,所以我会记录字体大小以及整个屏幕高度。

enter image description here

因此字体大小 50 ,高度 1024

然后,我切换到iPhone SE

enter image description here enter image description here

这非常糟糕,所以我修正了字体大小:

enter image description here

录制后字体大小 25 ,高度 568

第2步:

将计算器应用程序和找到常量字体大小关联到高度(在我的情况下),给予或接受一点。

这就是我的意思:

我知道50件作品有1024件,而25幅件和568件作品一起使用。

除以50/1024给你.048828125。

乘以568等于27.734375,这对SE的字体大小来说有点胖。

重复该过程,但使用SE的值进行分割后生成.0440140845,并检查iPad的高度是否会产生45的字体大小,对于强大的iPad屏幕来说有点小。

所以我将商分成中间,得到一个大约0.46的数字。

第3步:

使用此编号连接标签更改 字体大小以编程方式

首先,将标签拖动到插座集合中。我将我的连接命名为“headerLabels”,因为它们都位于屏幕的顶部。

enter image description here

然后,你可以偷我的代码,但不要用它赚太多钱;)

// 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)

<强> 1。选择标签并打开属性检查器 Select the UI (button, label etc)

<强> 2。单击+按字体+,选择宽度和高度为“常规”,单击添加变体 click on + icon on side of font, select width and height regular

第3。将出现另一个字体字段,这将代表ipad /大屏幕的字体/大屏幕幻觉(滚动视图)

another font field will appear, this is for big screen (ipad or illusion of big screen by scroll view etc)

<强> 4。为ipad选择所需的字体

select the desired size and font you want to show on ipad

答案 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

希望这有帮助! :)