Причина того, что вы делаете, не работает так, как вы ожидаете, потому что
– sizeWithFont:forWidth:lineBreakMode:
для "Вычисления метрик для одной строки текста", тогда как
-sizeWithFont:constrainedToSize:lineBreakMode:
для "Вычисления метрик для нескольких строк текста".Из документации :
Вычисление метрик для одной строки текста
– sizeWithFont:
– sizeWithFont:forWidth:lineBreakMode:
– sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode:
Вычисление метрик для нескольких строк текста
– sizeWithFont:constrainedToSize:
– sizeWithFont:constrainedToSize:lineBreakMode:
Попробуйте вместо этого использовать -sizeWithFont:constrainedToSize:lineBreakMode:
, например, это то, что я обычно делаю:
CGSize maximumLabelSize = CGSizeMake(353,9999);
CGSize expectedLabelSize = [string sizeWithFont:label.font
constrainedToSize:maximumLabelSize
lineBreakMode:label.lineBreakMode];
CGRect newFrame = label.frame;
newFrame.size.height = expectedLabelSize.height;
label.frame = newFrame;