2013-11-28 43 views
0

我子类化的UILabel所以它会调整自身,但由于某种原因,我的最后一个字被截断为...标签的设置高度编程

这其中大部分工作只是正常的时间,但由于某种原因,我的句子x字符被截断,我不明白为什么。有人可以看看这个吗?

- (void)setFrame:(CGRect)newFrame { 
    NSInteger maxNrOfLines = maxNumberOfLines == 0 ? 9999 : maxNumberOfLines; 
    NSString *text = self.text; 
    UIFont *font = self.font; 
    CGSize lineSize = CGSizeMake(newFrame.size.width, maxNrOfLines * font.lineHeight); 
    CGSize size = [text sizeWithFont:font constrainedToSize:lineSize lineBreakMode:self.lineBreakMode]; 

    NSInteger lineCount = MIN(maxNrOfLines, MAX(1, size.height/font.lineHeight)); 
    CGFloat height = font.lineHeight * lineCount + 10; 

    newFrame.size.height = height; 
    super.frame = newFrame; 
    super.numberOfLines = newFrame.size.height/font.lineHeight; 
} 

我的句子应该是3个系,但只2.

+0

你检查什么maxNumberOfLines'的'实际价值,因此,'maxNrOfLines'的价值?我可能会错过一些东西,但我没有看到其他任何可能导致这种情况的东西。 – triazotan

+0

maxNumberOfLines = 9999 maxNrOfLines = 0 最终lineCount将与我的森泰斯2 –

回答

1

计算为了准确计算的UILabel的高度,你可以使用sizeWithFont constrainedToSize:lineBreakMode:
例子:

float width = 296; 
CGSize maximumLabelSize = CGSizeMake(width, 9999); 
CGSize expectedLabelSize = [yourText sizeWithFont:yourLabel.font constrainedToSize:maximumLabelSize lineBreakMode:yourLabel.lineBreakMode]; 
//set height of yourLabel to what we calculated 
CGRect frame = yourLabel.frame; 
frame.size.height = expectedLabelSize.height; 
yourLabel.frame = frame; 

在这方法,我们期待用户输入宽度字体lineBreakMo UILabel的de,它返回预期的帧大小。