Как вы рассчитываете готовый прямоугольник для строки в Objective-C / Какао? - PullRequest
8 голосов
/ 04 марта 2009

Используя Objective-C / Какао, как рассчитать ширину и высоту, необходимые для рисования строки на основе определенного шрифта? В C # /. Net вы можете сделать это так:

SizeF textSize = graphics.MeasureString(someString, someFont);

Есть ли что-то подобное в Objective-C / Какао?

Ответы [ 6 ]

13 голосов
/ 04 марта 2009

Вот конкретный пример, основанный на ответах Дэниелпанкасса и Питера Хоси:

NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:[NSFont fontWithName:@"Helvetica" size:12], NSFontAttributeName, nil];
NSAttributedString *text = [[NSAttributedString alloc] initWithString:@"Hello" attributes: attributes];
NSSize textSize = [text size];

Для новичков в Objective-C / Cocoa, таких как я, пример действительно имеет большое значение. Если вы исходите из C ++ / Java / C # или любого другого синтаксиса Objective-C, который может показаться действительно чуждым, и, поскольку Apple не очень много встраивает, если какой-либо пример кода в своей документации по Какао, изучить этот материал довольно сложно.

7 голосов
/ 04 марта 2009

Следующий код аналогичен тому, что я использую для кроссплатформенного текста CALayer:

#if defined(TARGET_IPHONE_SIMULATOR) || defined(TARGET_OS_IPHONE)
    UIFont *theFont = [UIFont fontWithName:fontName size:fontSize];
    CGSize textSize = [text sizeWithFont:theFont];
#else
    NSFont *theFont = [NSFont fontWithName:fontName size:fontSize];
    CGSize textSize = NSSizeToCGSize([text sizeWithAttributes:[NSDictionary dictionaryWithObject:theFont forKey: NSFontAttributeName]]);
#endif

Это дает вам CGSize для именованного текста NSString с именем шрифта fontName и размером fontSize.

6 голосов
/ 04 марта 2009

Один путь - sizeWithAttributes:, как сказал Даниэльпанкас. Другой способ - создать NSAttributedString и запросить его для size. Единственное отличие состоит в том, что один способ дает вам объект с текстом и атрибутами вместе (приписанная строка), тогда как другой хранит их отдельно.

4 голосов
/ 04 марта 2009

Вы используете NSString sizeWithAttributes: метод.

0 голосов
/ 14 марта 2013

Ооо под iOS6 вы можете получить правильный размер следующим образом:

CGSize textSize = [theString sizeWithFont:theFont
                             forWidth:160.0f
                        lineBreakMode:NSLineBreakByWordWrapping];
0 голосов
/ 21 февраля 2013

Если вы используете докладчика, например, UILabel / NSLabel (вместо того, чтобы просить строку нарисовать себя). Тогда вам следует задать этот объект правильного размера.

См. блог Майка Веллера о ярлыках для подробного анализа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...