自动收缩标签,多行Swift

时间:2015-04-04 04:54:44

标签: ios swift uilabel

我正在制作一款不使用故事板的应用。该应用程序有一个很长的文本,所以我不能在一行上获得空间。该应用程序适用于iPad和iPhone。 adjustSizeToFit = true不起作用,是否有一个用多行来调整标签大小的元数据?

1 个答案:

答案 0 :(得分:3)

UILabel上没有名为adjustSizeToFit的属性。你确定你不是adjustsFontSizeToFitWidth吗?如果您查看文档,请说:

  

通常,标签文本使用您在font属性中指定的字体绘制。但是,如果此属性设置为true,并且text属性中的文本超出了标签的边界矩形,则接收器将开始缩小字体大小,直到字符串适合或达到最小字体大小。在iOS 6及更早版本中,仅当numberOfLines属性设置为1时,此属性才有效。

我不确定你想要的是什么。

如果您想要一个具有任意行数的UILabel,其中文本包含在一定宽度内,请继续阅读:

您所做的将取决于您是否使用AutoLayout:

非自动布局

只需使用:

let size = label.sizeThatFits(CGSize(width: myWidth, height: CGFloat.max))
// CGFloat.max, because we don't want to limit the UILabel's height.
label.frame.size = size

<强>自动版式

首先,您应该将numberOfLines设置为零。 其次,您需要告诉AutoLayout每行的长度,默认为标签的宽度。为此,您需要一个UILabel子类:

class myLabel : UILabel {
    override func layoutSubviews() {
        // 1. Get the label to set its frame correctly:
        super.layoutSubviews()

        // 2. Now the frame is set we can get the correct width 
        // and set it to the preferredMaxLayoutWidth.
        self.preferredMaxLayoutWidth = self.frame.width
    }
}