Ios 使用故事板根据文本数量垂直展开标签

Ios 使用故事板根据文本数量垂直展开标签,ios,storyboard,uilabel,Ios,Storyboard,Uilabel,我有一个ui标签链接到一个属性,该属性可以包含许多不同长度的文本 如何使标签垂直展开以适应不同数量的文本 我已在情节提要中将线条设置为0。我在尺寸检查器中尝试了不同的高度。如果我将高度设置得足够大,将显示第二行。但是如果只有一行,就会留下很多空白。如果标签只有一行的大小,我只看到一行文本在标签边缘结束 我也尝试了下面的代码,但没有达到预期的效果 self.myLabel.numberOfLines = 0; [self.myLabel sizeToFit]; 如果可能的话,您不希望使用

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

如何使标签垂直展开以适应不同数量的文本

我已在情节提要中将线条设置为0。我在尺寸检查器中尝试了不同的高度。如果我将高度设置得足够大,将显示第二行。但是如果只有一行,就会留下很多空白。如果标签只有一行的大小,我只看到一行文本在标签边缘结束

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

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

如果可能的话,您不希望使用自动布局,除非没有其他方法。

您可以尝试以下代码。我不确定您的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
编辑 如果您希望下面的代码正常工作,您必须坚持自动调整大小,而不是像您可能喜欢的那样自动布局

下图1显示了必须取消选中的复选框,以启用自动调整大小而不是自动布局

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

设置自动调整大小遮罩后,在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);
}
并从
视图willlayoutsubviews
调用该方法:

-(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
}

这将确保您收到所需的效果,而不考虑您可能遇到的方向更改。

您使用的是自动布局还是自动调整大小的遮罩?第五行中的标签是否应为self.mylabel?同样在最后一行,我收到错误“struct cgpoint中没有名为left的成员”,我需要设置size.width和size.height吗?获取“使用未声明的标识符”大小我将其标记为正确,因为它似乎是正确的,但是,我现在发现它仍然取决于故事板中标签的高度。如果故事板中的高度太小,则只显示一条线。如果高度足够大,所有的谎言都会显示出来,但是如果文本很短,它会占用太多的空间。有没有一种方法可以消除对故事板中标签高度的依赖?@user1904273我猜您正在努力解决应用于标签的自动调整掩码大小的问题。请看我上面更新的答案。我使用的是Xcode 6。目前没有任何限制。您的建议是否与为上边距和左边距添加2个新约束相同?