Я знаю, что существует этот:
sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode:
Но так как CGSize всегда имеет ту же высоту и не корректируется ни к какому shrinked тексту или независимо от того, что, CGSize не говорит, как ржание текст.
Пример: Сделайте UILabel с точками 320 x 55 и поместите loooooooooooooong текст там. Позвольте маркировке уменьшить текст вниз. Удивление: CGSize.height остается той же высотой, даже если текст является столь крошечным, что Вам нужен микроскоп.
Хорошо поэтому после стука по моей голове против моего MacBook Pro, который является половиной пути, поврежденного теперь, единственные думают, что это может помочь, то, что противный actualFontSize. Но размер шрифта находится в цицеро, я думаю, это не действительно, что Вы входите в экран, не так ли?
То, когда тот размер шрифта равняется 10, является моим текстом действительно 10 ржания точек в максимуме? Время от времени я попробовал точно, что, и как только текст имел y или некоторый символ, который расширяется на ниже (как этот хвост y делает), он выходит за пределы, и целый текст больше, чем 10 точек.
Таким образом, как Вы вычислили бы реальную текстовую высоту для одной строки uilabel, не получая длинную бороду и некоторый опыт больницы?
Похоже, что после того, как вы получите фактический размер шрифта из этого вызова функции, вам нужно будет снова вызвать этот новый размер:
NSString* yourString = @"SomeString";
float actualSize;
[yourString sizeWithFont:yourFont
minFontSize:minSize
actualFontSize:&actualSize
forWidth:rectWidth
lineBreakMode:breakMode];
CGSize size = [yourString sizeWithFont:[UIFont fontWithName:fontName size:actualSize]];
Попробуйте этот код:
CGSize maximumSize = CGSizeMake(300, 9999);
NSString *myString = @"This is a long string which wraps";
UIFont *myFont = [UIFont fontWithName:@"Helvetica" size:14];
CGSize myStringSize = [myString sizeWithFont:myFont
constrainedToSize:maximumSize
lineBreakMode:self.myLabel.lineBreakMode];
из моего ответа здесь
Он использует другой метод и устанавливает очень высокий CGSize
в начале (который затем уменьшается до размера строки)