2012-11-26 152 views
4

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

_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; 

} 

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

+0

尝试最大范围更改为MAXFLOAT,MAXSIZE = CGSizeMake(MAXFOAT,self.view.bounds.size。宽度-30); – zt9788

+3

试试这个, maxSize.width = label.frame.size.width; –

+0

拉胡尔,这确实有效,写这个答案,我会接受它。如果你可以 - 你可以解释一下,为什么宽度是这样的?我的高度计算错误,而不是宽度,所以对我来说有点不清楚。 – Datenshi

回答

2

我已经改变了你的方法...请检查it..it可以帮助你..

- (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); 
} 
0

为什么以编程方式调整标签大小?这是你不能在IB或使用autorezizeMask

0

标签的约束尺寸没有按照您的计划进行计算,目前,您的代码将标签高度限制为视图的边界高度。将您的maxSize实例更改为:

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

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

+0

对不起,用你的方式尝试过,但是这种方式根本不能调整大小。请看看Rahul的评论,这样我就可以工作。 – Datenshi

+0

@Datenshi对不起,发送错误的值到第二个参数。编辑包含正确的代码。 – nmock

+0

对不起,但作品仍然一样 - 根本不调整大小。 – Datenshi

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

为什么要用'lines:'方法?只需将'numberOfLines'设置为0.只要标签的高度已设置,它就会正确显示。 – rmaddy

+0

嗯,你是ri8,我编辑了我的答案,谢谢你的建议。 – Nookaraju

+0

工作答案也是如此。感谢您的时间!然而,之前有正确的答案,所以我会早一点接受。 – Datenshi