Как получить ширину строки NSString?

Я пытаюсь получить ширину строки NSString (например, NSString * myString = @ "hello"). Есть ли способ сделать это?

Спасибо.

32
задан JeremyP 7 August 2010 в 13:20
поделиться

4 ответа

Вот относительно простой подход. Просто создайте NSAttributedString с соответствующим шрифтом и запросите его размер:

- (CGFloat)widthOfString:(NSString *)string withFont:(NSFont *)font {
     NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:font, NSFontAttributeName, nil];
     return [[[NSAttributedString alloc] initWithString:string attributes:attributes] size].width;
 }
59
ответ дан 27 November 2019 в 20:07
поделиться

Отправьте строке сообщение sizeWithAttributes: , передав словарь, содержащий атрибуты, с которыми вы хотите измерить строку.

3
ответ дан 27 November 2019 в 20:07
поделиться

В UIKit есть хорошее дополнение к NSString, делающее sizeWithAttributes: немного легче:

CGSize titleSize = [title sizeWithFont:titleFont 
                     constrainedToSize:contentCellSize 
                         lineBreakMode:UILineBreakModeWordWrap];
0
ответ дан 27 November 2019 в 20:07
поделиться

Извините, мой вопрос был недостаточно подробным, и я не совсем то, что я пытаюсь сделать. Я использую текстовое хранилище, диспетчер компоновки и текстовый контейнер. Решение состоит в том, чтобы использовать диспетчер компоновки для определения прямоугольника, ограничивающего прямоугольник. Вот код.

NSTextStorage *textStorage = [[NSTextStorage alloc] initWithString:@"hello"];
NSLayoutManager *layoutManager = [[NSLayoutManager alloc] init];
NSTextContainer *textContainer = [[NSTextContainer alloc] init];

[layoutManager addTextContainer:textContainer];
[textContainer release];

[textStorage addLayoutManager:layoutManager];
[layoutManager release];

//Figure out the bounding rectangle
NSRect stringRect = [layoutManager boundingRectForGlyphRange:NSMakeRange(0, [layoutManager numberOfGlyphs]) inTextContainer:textContainer];
0
ответ дан 27 November 2019 в 20:07
поделиться