1

我在动态添加多行 UILabel 时遇到问题。这是我得到的结果:

在此处输入图像描述

我希望“摘要”框中的标签自然包裹。这是我用来添加标签的代码:

-(void)setSummary{
    summaryContentLabel = [[UILabel alloc] init];
    summaryContentLabel.numberOfLines=0;
    summaryContentLabel.lineBreakMode=NSLineBreakByWordWrapping;
    summaryContentLabel.text=self.summary;
    summaryContentLabel.font=[UIFont fontWithName:@"Helvetica" size:13.0];

    [summaryView addSubview:summaryContentLabel];
    [summaryContentLabel  setTranslatesAutoresizingMaskIntoConstraints:NO];
    NSDictionary *views = NSDictionaryOfVariableBindings(summaryView,summaryContentLabel ,summaryLabel);
    [summaryView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[summaryLabel]-5-[summaryContentLabel(==100)]-5-|" options:nil metrics:nil views:views]];

}

你会注意到这本书的标题完全按照我想要的方式包装。这是在 IB 中完成的。不幸的是,我必须在代码中添加这个标签。自动布局也是一项要求。

4

4 回答 4

2

弄清楚了。我需要为标签的宽度添加一个额外的约束,如下所示:

[summaryView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[summaryContentLabel]-|" options:nil metrics:nil views:views]];
于 2012-10-15T18:40:38.323 回答
1

可能是我迟到了,但我找到了解决方案。您需要为 summaryContentLabel 显式设置 preferredMaxLayoutWidth。例如:

summaryContentLabel.preferredMaxLayoutWidth = 200;

而且我注意到,如果您通过 xib 执行相同的视图布局,则界面构建器将设置 preferredMaxLayoutWidth 具有正确的值。

于 2012-12-18T18:57:26.593 回答
-3

将此代码用于多行标签:-

-(void)setSummary {

summaryContentLabel = [[UILabel alloc] init];
summaryContentLabel.numberOfLines=0;
summaryContentLabel.textAlignment   = UITextAlignmentLeft;
summaryContentLabel.font=[UIFont fontWithName:@"Helvetica" size:13.0];
[summaryView addSubview:summaryContentLabel];

CGSize size = [self.summary sizeWithFont:[UIFont fontWithName:@"Helvetica" size:13.0] constrainedToSize:CGSizeMake(240, 99999) lineBreakMode:UILineBreakModeWordWrap];
summaryContentLabel.frame=CGRectMake(72, 22, 240, size.height);  //set the frame according to your need
summaryContentLabel.text=self.summary;

}

于 2012-10-15T19:51:15.070 回答
-4

看起来您实际上并没有为您的 UILabel 设置帧大小。你总是可以这样做:

CGRectMake(10, 10, 280, 9999);

对于高度,然后确保它适合而不是设置为 9999 的高度:

[summaryContentLabel sizeToFit];
于 2012-10-15T18:27:56.623 回答