使用Storyboard

时间:2016-01-01 13:33:36

标签: ios storyboard uilabel

我有一个UIlabel链接到一个属性,该属性可以包含许多不同长度的文本。

如何让标签垂直展开以适应不同数量的文字?

我在故事板中将行设置为0。我在Size Inspector中尝试了不同的高度。如果我将高度设置得足够大,则会显示第二行。但是如果只有一行,就会留下很多空白。如果标签大约只有一行的大小,我只看到一行文本以标签的边缘结束。

我也尝试了以下代码,但它没有达到预期的效果。

self.myLabel.numberOfLines = 0;
    [self.myLabel sizeToFit];

如果可能的话,不希望使用自动布局,除非没有别的办法。

1 个答案:

答案 0 :(得分:1)

修改

如果您希望以下代码能够正常运行,您必须坚持使用自动调整大小而不是自动布局

下面的图片1显示了必须取消选中的复选框才能启用自动调整而不是自动布局。

然后,您需要重新考虑应用于标签的自动调整遮罩。您可以设置自动调整大小屏UIViewAutoresizingFlexibleLeftMarginUIViewAutoresizingFlexibleTopMargin以及绝对没有其他。请参见下面的图2:

Auto layout

Autoresizing masks

设置自动调整遮罩后,在viewcontroller类中创建如下的方法:

-(void)adjustLabelWithText:(NSString*)text {
    self.myLabel.numberOfLines = 0;
    self.myLabel.lineBreakMode = NSLineBreakByWordWrapping;
    self.myLabel.text = text;
    CGSize maxSize = CGSizeMake(self.view.bounds.size.width - 2 * self.myLabel.frame.origin.x, CGFLOAT_MAX); //I have used current window width - some margin to the both sides. you could change it to watever suitable for you
    CGSize requiredSize = [self.myLabel sizeThatFits:maxSize];
    self.myLabel.frame = CGRectMake(self.myLabel.frame.origin.x, self.myLabel.frame.origin.y, requiredSize.width, requiredSize.height);
}

viewWillLayoutSubviews调用方法:

-(void)viewWillLayoutSubviews {
    [super viewWillLayoutSubviews];

    [self adjustLabelWithText:@"Chapter One\n "
     "A Stop on the Salt Route\n "
     "1000 B.C.\n "
     "As they rounded a bend in the path that ran beside the river, Lara recognized the silhouette of a fig tree atop a nearby hill. The weather was hot and the days were long. The fig tree was in full leaf, but not yet bearing fruit."]; //whatever long text you prefer
}

这将确保您获得所需的效果,无论您可能正在努力改变方向。

您可以尝试以下代码。我不确定您的UI配置,但代码通常有效:

self.myLabel.numberOfLines = 0;
self.myLabel.lineBreakMode = NSLineBreakByWordWrapping;
self.myLabel.text = @"your long text";
CGSize maxSize = CGSizeMake(200.0f, CGFLOAT_MAX); // you might change 200.0 to whatever suits for you

CGSize requiredSize = [self.myLabel sizeThatFits:maxSize];
//with Auto Layout you need to use: CGSize requiredSize = [self.myLabel systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];

self.myLabel.frame = CGRectMake(self.myLabel.frame.origin.x, self.myLabel.frame.origin.y, requiredSize.width, requiredSize.height); //use whatever left/top you find suitable

希望它有所帮助!