Как вычислить высоту текстового прямоугольника от NSString?

Я знаю, что существует этот:

sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode:

Но так как CGSize всегда имеет ту же высоту и не корректируется ни к какому shrinked тексту или независимо от того, что, CGSize не говорит, как ржание текст.

Пример: Сделайте UILabel с точками 320 x 55 и поместите loooooooooooooong текст там. Позвольте маркировке уменьшить текст вниз. Удивление: CGSize.height остается той же высотой, даже если текст является столь крошечным, что Вам нужен микроскоп.

Хорошо поэтому после стука по моей голове против моего MacBook Pro, который является половиной пути, поврежденного теперь, единственные думают, что это может помочь, то, что противный actualFontSize. Но размер шрифта находится в цицеро, я думаю, это не действительно, что Вы входите в экран, не так ли?

То, когда тот размер шрифта равняется 10, является моим текстом действительно 10 ржания точек в максимуме? Время от времени я попробовал точно, что, и как только текст имел y или некоторый символ, который расширяется на ниже (как этот хвост y делает), он выходит за пределы, и целый текст больше, чем 10 точек.

Таким образом, как Вы вычислили бы реальную текстовую высоту для одной строки uilabel, не получая длинную бороду и некоторый опыт больницы?

6
задан nevan king 23 April 2010 в 12:52
поделиться

3 ответа

Похоже, что после того, как вы получите фактический размер шрифта из этого вызова функции, вам нужно будет снова вызвать этот новый размер:

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]];
2
ответ дан 10 December 2019 в 02:44
поделиться

Также вы установили label.numberOfLines = 0; ?

1
ответ дан 10 December 2019 в 02:44
поделиться

Попробуйте этот код:

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 в начале (который затем уменьшается до размера строки)

3
ответ дан 10 December 2019 в 02:44
поделиться