Я пытаюсь получить ширину строки NSString (например, NSString * myString = @ "hello"). Есть ли способ сделать это?
Спасибо.
Вот относительно простой подход. Просто создайте NSAttributedString с соответствующим шрифтом и запросите его размер:
- (CGFloat)widthOfString:(NSString *)string withFont:(NSFont *)font {
NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:font, NSFontAttributeName, nil];
return [[[NSAttributedString alloc] initWithString:string attributes:attributes] size].width;
}
Отправьте строке сообщение sizeWithAttributes:
, передав словарь, содержащий атрибуты, с которыми вы хотите измерить строку.
В UIKit есть хорошее дополнение к NSString, делающее sizeWithAttributes: немного легче:
CGSize titleSize = [title sizeWithFont:titleFont
constrainedToSize:contentCellSize
lineBreakMode:UILineBreakModeWordWrap];
Извините, мой вопрос был недостаточно подробным, и я не совсем то, что я пытаюсь сделать. Я использую текстовое хранилище, диспетчер компоновки и текстовый контейнер. Решение состоит в том, чтобы использовать диспетчер компоновки для определения прямоугольника, ограничивающего прямоугольник. Вот код.
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];