UILabel文本被切断了

时间:2012-11-26 07:22:07

标签: objective-c ios cocoa-touch

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

    _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 个答案:

答案 0 :(得分: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;

}

使用此代码块,可能会有所帮助。

答案 1 :(得分: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);
}

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

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