iOS sizeToFit和sizeThatFits

1, sizeThatFits返回的大小都是一樣的。 不會改變原來的label的view的size
CGSize expectedSizeMessage = [messageLabel sizeThatFits:CGSizeMake(30, 5)];
CGSize expectedSizeMessage3 = [messageLabel sizeThatFits:CGSizeZero];
CGSize expectedSizeMessage4 = [messageLabel sizeThatFits:CGSizeMake(1000, 1000)];

//可以計算字符串的size
+ (CGSize)sizeStr:(NSString *)str forFont:(UIFont *)font size:(CGSize)size mode:(NSLineBreakMode)lineBreakMode  {
    UILabel *label = [UILabel new];
    label.text = str;
    label.lineBreakMode = lineBreakMode;
    label.font = font;
    label.numberOfLines= 0;
    CGSize size1=    [label sizeThatFits:size];
    CGSize size2 =  [str sizeForFont:font size:size mode:lineBreakMode];
    NSLog(@"%@,  %@", NSStringFromCGSize(size1),  NSStringFromCGSize(size2));
    return size1;
}

2,sizeToFit//返回的大小跟上面的相同。會立即改變label的size
[messageLabel sizeToFit];
CGSize expectedSizeMessage2 = messageLabel.bounds.size;

使用這兩個方法必須先給label賦值。

推薦閱讀更多精彩內容