4

我正在尝试动态设置标签大小。它以一种奇怪的方式工作,我截断了一些文本。我首先设置我的标签文本,然后尝试像这样调整它的大小。

    _switch2Label.text = @"Call on alarm, there will be no call if other user of alarm system will recieve an alarm call and confirm (answer) it by pressing 0#";
    _switch2Label.numberOfLines = 0;
    [self newFrame:_switch2Label];

- (void) newFrame:(UILabel *) label
{

    CGSize maxSize = self.view.bounds.size;
    maxSize.width = maxSize.width - 30;
    CGSize labelSize = [label.text sizeWithFont:label.font constrainedToSize:maxSize lineBreakMode:label.lineBreakMode];

    CGRect newFrame = label.frame;
    newFrame.size.height = labelSize.height;
    label.frame = newFrame;

}

我只得到三行文本,而这个标签需要五行。也许有人可以在这里看到我的错误?如果我在标签上添加更多文本,它会显示出来,但仍然有大约两行标签文本被截断。

4

4 回答 4

2
 _switch2Label.text = @"Call on alarm, there will be no call if other user of alarm system will recieve an alarm call and confirm (answer) it by pressing 0#,";
 _switch2Label.numberOfLines = 0;
 [self newFrame:_switch2Label];



- (void) newFrame:(UILabel *) label
{

    CGSize maximumSize = CGSizeMake(label.frame.size.width, 10000);
    //maxSize.width = maxSize.width - 30;
    CGSize labelSize = [label.text sizeWithFont:label.font constrainedToSize:maximumSize lineBreakMode:UILineBreakModeWordWrap];

    CGRect newFrame = label.frame;
    newFrame.size.height = labelSize.height;
    label.frame = newFrame;

}

使用这个代码块,可以帮助你。

于 2012-11-26T07:47:02.323 回答
2

我已经改变了你的方法......请检查它..它可能会帮助你..

- (void) newFrame:(UILabel *) label
{
     CGSize constraint = CGSizeMake(300, 1000.0f);
     CGSize size_txt_overview1 = [label.text sizeWithFont:[UIFont fontWithName:@"Arial Rounded MT Bold" size:15] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];
     label.frame = CGRectMake(20,20, size_txt_overview1.width, size_txt_overview1.height+15);
}
于 2012-11-26T07:50:46.417 回答
0

为什么以编程方式调整标签大小?这是您在 IB 或使用autorezizeMask无法做到的事情吗?

于 2012-11-26T07:27:38.870 回答
0

标签的约束大小未按您的预期计算,目前,您的代码将标签高度限制为视图的边界高度。将您的 maxSize 实例更改为:

CGSize maxSize = CGSizeMake(self.view.bounds.size.width - 30, MAXFLOAT);
CGSize labelSize = ...

这样做将确保约束不受视图边界的约束。如果您希望标签能够超出视图的边界,您可能还需要考虑设置视图的 clipsToBounds 属性。

于 2012-11-26T07:33:00.080 回答