2013-11-28 38 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,它返回預期的幀大小。