UILabel sizeThatFits不工作

Sea*_*ser 5 uitableview uiview uilabel ios

我正在尝试计算UITableViewCell的高度,所以我定义了一个类似于此的类方法

+ (CGFloat)heightWithText:(NSString *)text
{
    SizingLabel.text = text;
    [SizingLabel sizeThatFits:CGSizeMake(LABEL_WIDTH, CGFLOAT_MAX)];

    return (TOP_MARGIN + SizingLabel.frame.size.height + BOTTOM_MARGIN);
}
Run Code Online (Sandbox Code Playgroud)

我已经像这样定义了SizingLabel:

+ (void)initialize
{
    SizingLabel = [[UILabel alloc] initWithFrame:CGRectZero];
    SizingLabel.numberOfLines = 0;
    SizingLabel.lineBreakMode = NSLineBreakByWordWrapping;
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我在-heightWithText:方法中粘贴断点,我会注意到SizingLabel的尺寸永远不会改变,因此我得到一个不正确的值.这是为什么?

Riv*_*era 6

如上所述,sizeThatFits:(并因此sizeToFit)不适合UILabel对象.

您最好使用首选textRectForBounds:limitedToNumberOfLines:方法:

+ (CGFloat)heightWithText:(NSString *)text
{
    resizingLabel.text = text;
    CGSize labelSize = [resizingLabel textRectForBounds:CGRectMake(0.0, 0.0, LABEL_WIDTH, CGFLOAT_MAX)
                                 limitedToNumberOfLines:0].size; // No limit

    return (TOP_MARGIN + labelSize.height + BOTTOM_MARGIN);
}
Run Code Online (Sandbox Code Playgroud)


Onk*_*arK 5

+ (CGFloat)heightWithText:(NSString *)text
{
    SizingLabel.text = text;
    CGSize labelSize = [SizingLabel sizeThatFits:CGSizeMake(LABEL_WIDTH, CGFLOAT_MAX)];

    return (TOP_MARGIN + labelSize.height + BOTTOM_MARGIN);
}
Run Code Online (Sandbox Code Playgroud)

  • @OlgaVogue 不,它只是有时有效。sizeThatFits 是出了名的错误。 (3认同)