我有一个UIlabel
链接到一个属性,该属性可以包含许多不同长度的文本。
如何让标签垂直展开以适应不同数量的文字?
我在故事板中将行设置为0。我在Size Inspector中尝试了不同的高度。如果我将高度设置得足够大,则会显示第二行。但是如果只有一行,就会留下很多空白。如果标签大约只有一行的大小,我只看到一行文本以标签的边缘结束。
我也尝试了以下代码,但它没有达到预期的效果。
self.myLabel.numberOfLines = 0;
[self.myLabel sizeToFit];
如果可能的话,不希望使用自动布局,除非没有别的办法。
答案 0 :(得分:1)
修改强>
如果您希望以下代码能够正常运行,您必须坚持使用自动调整大小而不是自动布局。
下面的图片1显示了必须取消选中的复选框才能启用自动调整而不是自动布局。
然后,您需要重新考虑应用于标签的自动调整遮罩。您可以设置自动调整大小屏UIViewAutoresizingFlexibleLeftMargin
和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);
}
从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
希望它有所帮助!