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 行。

4

1 回答 1

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;

在这种方法中,我们希望用户输入UILabel 的widthfontlineBreakMode并返回预期的帧大小。

于 2013-11-29T09:03:01.437 回答