如何让 UILabel 更好地调整大小?

How to get UILabel to resize better?

我试图在给定的最大宽度下使我的多行 UILabel 尽可能小,但是 sizeToFit()sizeThatFits(_,_) 方法没有给出我想要的结果。

看看这张图片: 红色矩形代表我传入 sizeThatFits 的宽度(而高度为 Max)。显然,如您所见,此方法实际上 return 适合 的尺寸,但它并没有给我尽可能小的尺寸,这正是我想要的。

假设我指定了 max-width: 300。这个实际结果给了我 ca 的大小。 280*50。 正如您在图像中看到的,文本现在是这样写的:

Here is some text that is supposed to
align nicely

我想达到的效果是这样的:

Here is some text that is
supposed to align nicely

这个结果会具有相同的高度,但宽度要小得多,例如 200*50 我意识到很难定义 "smallest size possible",因为它可以 return 这个:

Here
is
some
text
that
...

甚至每行一个字母。但是考虑到 sizeThatFits return 具有给定的宽度和高度,为什么它不是 return 我想要的结果,高度相同,但 更小的宽度。为什么不是最小的 returned?有这样的功能吗?

斯蒂,

你可以试试这哥们:)我一直在用,感觉还不错:)

CGRect rect = [yourText boundingRectWithSize:CGSizeMake(maxWidth_you_Can_afford, CGFLOAT_MAX)
                                                             options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
                                                          attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:16]}
                                                             context:nil];

执行后的矩形将具有呈现文本所需的最小宽度和高度:)

有了框架后,您现在可以为标签设置相同的框架并设置文本:)

我在聊天气泡中使用过它:)而且效果很好:)

编码愉快:)

我做了自己的解决方案,效果很好:

private func calculateWantedSize(label:UILabel)->CGSize{
    var lastAcceptableWidth = label.bounds.width
    let currentHeight = label.sizeThatFits(CGSize(width: label.bounds.width, height: CGFloat.max)).height

    var tempHeight = currentHeight
    while(tempHeight == currentHeight){
        let newWidth = lastAcceptableWidth - 1
        tempHeight = label.sizeThatFits(CGSize(width: newWidth, height: CGFloat.max)).height
        if tempHeight == currentHeight{
            lastAcceptableWidth = newWidth
        }
    }
    return CGSize(width: lastAcceptableWidth, height: label.bounds.height)
}

在这里,我将我的标签发送给一个函数,该函数首先计算标签的当前宽度和高度,然后遍历 width-1 并检查结果高度,直到高度发生变化。当宽度太低以至于需要换行时,高度会发生变化。发生这种情况时,我 return 最后一个有效宽度 仍然需要与原始宽度相同的高度。

这非常适合我的问题,使用属性文本等

当然,在使用这个的时候,一定要在调用之前做一些检查。我不知道当标签只有一个单词、一个字母或根本没有文本时使用此功能会发生什么。我只测试了我知道这个应用程序会发生的情况,它运行良好。