UILabel不会自动收缩

时间:2014-08-07 18:08:13

标签: ios objective-c autolayout uifont

我正在尝试创建一个视图,根据其父视图的高度缩放特定的UILabel。在故事板中,我将自动收缩选项设置为“最小字体大小”为值8,行数为1.但是,我注意到如果我将行数设置为1,则字体大小不会适应。如果我将行数设置为0,则会发生自动收缩,但字体大小小于我为4.0“显示器指定的147大小。

(顶部):左:num行= 1,右:在3.5“显示器上

(下):左:num行= 1,右:4.0行显示上的num行= 0

num lines 1 on 3.5" num lines 0 on 3.5" num lines 1 on 4.0" num lines 0 on 4.0"

理想情况下,我希望4.0英寸屏幕的字体大小为147,并使其能够在3.5英寸显示屏上缩小。

3 个答案:

答案 0 :(得分:5)

我的理解是,如果您将numberOfLines设置为1,标签将根据宽度而非高度自动收缩。这应该解释左上角的图像。

对于右下角的图像,我会尝试增加标签的高度。它将根据文本的内在内容大小自动收缩,因此看起来字体大小为147的内容高度当前高于您在较高屏幕中的标签高度。

答案 1 :(得分:2)

当宽度小于所需宽度而不是高度不足时,自动收缩似乎仅适用。

我用自定义子类解决了它:

class HeightAutoShrinkingLabel: UILabel {
    override func layoutSubviews() {
        super.layoutSubviews()
        while self.font.pointSize > 1 {
            if self.intrinsicContentSize.height <= self.frame.height {
                // Fits
                break
            }
            self.font = self.font.withSize(font.pointSize - 1)
        }
    }
}

答案 2 :(得分:0)

垂直和水平自动收缩的解决方案非常简单:

label.font = [UIFont fontWithName:gMainFont size:label.height];
label.minimumScaleFactor = 0.1;