2009-09-16 6 views
16

Мне нужно измерить ширину пикселя строки в Cocoa Touch. Может ли кто-нибудь указать мне ссылку, которая объясняет, как это сделать?Измерение ширины пикселя строки

+5

Вы не должны просить общего Objective-C ответ, когда этот вопрос действительно о функциях какао для Mac OS X или Cocoa Touch для iPhone OS. Objective-C - это просто язык программирования, который использует как Cocoa, так и Cocoa Touch. – PeyloW

+4

Есть ли другое использование объектива-c помимо программирования для Mac OS или IOS? Если да, то это важно? –

ответ

27

На iPhone OS это немного отличается, вместо этого посмотрите на NSString UIKit Additions Reference. Идея такая же, как в Cocoa для Mac OS X, но есть и другие методы.

Для отдельных строк текста использования:

- (CGSize)sizeWithFont:(UIFont *)font 
       forWidth:(CGFloat)width 
     lineBreakMode:(UILineBreakMode)lineBreakMode 

И для многострочных текстов используют:

- (CGSize)sizeWithFont:(UIFont *)font 
    constrainedToSize:(CGSize)size 
     lineBreakMode:(UILineBreakMode)lineBreakMode 

Использование UILineBreakMode в качестве аргумента для отдельных строк текста может сбивать с толку, но это потому что разрыв строки также используется для определения того, как обрезать текст.

+0

Кажется, что это нормально для обычных шрифтов, но, похоже, он не дает точных границ для шрифтов, таких как Zapfino. Пример кода находится по адресу http://paste.lisp.org/display/130803, а скриншот на выходе - http://ScrnSht.com/juixwk. Любая идея, почему и как ее решить? – trss

+0

устарел в iOS7 .. документы не относятся к какой-либо замене .. есть ли какие-либо? – abbood

+0

Текущие документы iOS7 (Xcode 5.0.1) относятся к заменам (которые, как правило, относятся только к iOS7). – JLundell

5

Посмотрите на NSString Application Kit Additions Reference, в частности boundingRectWithSize:options:attributes:. Значение, возвращаемое этой процедурой, должно дать вам ширину вашего NSString.

+8

В документации не очень понятно, как на самом деле использовать 'boundingRectWithSize: options: attributes:'. Было бы неплохо, если бы вы могли добавить пример того, как на самом деле использовать этот метод для измерения строки с определенным шрифтом. – PeyloW

0

Вышеупомянутое решение теперь устарело. Проверьте это для iOS 7+

sizeWithFont:constrainedToSize:lineBreakMode 

отменено сейчас. Используйте ниже фрагмент кода,

UIFont *font=[UIFont fontWithName:@"Arial" size:16.f]; 

NSString *name = @"APPLE"; 

CGSize size = [name sizeWithAttributes:@{NSFontAttributeName:font}];