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 のwidthfont、およびlineBreakModeを入力すると、予想されるフレーム サイズが返されます。

于 2013-11-29T09:03:01.437 に答える