2013-08-20 4 views
1

Я хочу изменить размер шрифта в некоторых UITextViews. Это прекрасно работает с коллекцией выпускной и этим кодом:получить font-weight of uitextview

for (UITextView *view in self.viewsToResize) { 
    if ([view respondsToSelector:@selector(setFont:)]) { 
    [view setFont:[UIFont systemFontOfSize:view.font.pointSize + 5]]; 
    } 
} 

Но моя проблема в том, что не каждый TextView использует systemFont в нормальном весе, некоторые из них находятся в смелом весе. Можно ли получить шрифт? С po view.font в области отладки я могу видеть все, что нужно:

$11 = 0x0c596ea0 <UICFFont: 0xc596ea0> font-family: "Helvetica"; font-weight: normal; font-style: normal; font-size: 12px 

Но как я могу получить доступ к начертание шрифта?

Использование второй коллекции розетки для смелых видов может решить мою проблему. Но мне интересно, что я не нашел ничего, чтобы получить только вес шрифта.

ответ

2

UIFont не имеет жирного/курсива/... свойства, поэтому вам придется полагаться только на имя шрифта. Это будет проблемой, если вы не знаете, какие шрифты будут использоваться.

В случае, если вы знаете, что будете использовать, например. только Helvetica вы можете попробовать это:

UIFont *font = textview.font; 
if([font.fontName isEqualToString:@"Helvetica-Bold"]) 
    NSLog(@"It's Bold!"); 

В качестве альтернативы вы можете искать font.fontName слово «жирный»/«средний»/«света» и т.д., но это не является гарантией того, вы получите что-то от каждого доступны шрифт:

if ([font.fontName rangeOfString:@"bold" options:NSCaseInsensitiveSearch].location == NSNotFound) { 
    NSLog(@"font is not bold"); 
} else { 
    NSLog(@"font is bold!"); 
} 
// if font.fontName contains "medium".... 
// if font.fontName contains "italic".... 

Проверьте наличие http://iosfonts.com/ на наличие названий шрифтов.

+0

описание шрифта содержит информацию о шрифте, проверьте это [[font.description componentsSeparatedByString: @ "font-weight:"] [1] componentsSeparatedByString: @ ";"] [0] Предполагая, что яблоко не изменит шрифт descrition – Eldhose

1

Но моя проблема в том, что не каждый textView использует systemFont в нормальный вес, некоторые из них выделены жирным весом.

Если вы хотите использовать полужирный шрифт System, то вы можете просто использовать

[UIFont boldSystemFontOfSize:15.0]; 

Однако, я все еще думаю о том частном случае, когда вам нужно использовать font-weight.

Update:

Там нет ничего в UIFont класса с помощью которого вы можете получить font-weight непосредственно. Вы можете посмотреть UIFont Class Reference.

Единственное, что вы можете сделать, это получить font-name и попытаться найти «жирную» подстроку в имени шрифта. Если найденное совпадение означает, что font-weight этого конкретного шрифта является «полужирным шрифтом».

Но все же это не самый эффективный метод.

+0

Да, это так. ;) Но чтобы решить, если мне нужно использовать 'systemFontOfSize' или' boldSystemFontOfSize', я должен знать вес шрифта в моем текущем представлении. – mjay

+0

@ mjay: Я тебя не понимаю. Если вы хотите показать некоторые шрифты в «Жирным шрифтом», вы можете использовать 'boldSystemFontOfSize', иначе вы можете использовать' systemFontOfSize'. Где этот «вес шрифта» появился в вашем случае? – Bhavin

+0

Поиск «жирной» -струйки - это решение, но вы правы - это не лучший метод. Я использую теперь вторую коллекцию розетки и вторую петлю для представлений с жирным шрифтом. Ваш ответ хорош, но N D был немного быстрее (и ему нужна репутация;)), поэтому я приму его ответ. – mjay

1

Вы можете получить UIFontDescriptor для шрифта, используя метод fontDescriptor. Затем вы получаете словарь fontAttributes из UIFontDescriptor, получаете UIFontDescriptorTraitsAttribute из словаря, который возвращает другой словарь, а затем читайте UIFontWeightTrait из этого словаря. Не испытано.

Теперь это проверено: не работает. fontAttributes всегда возвращает словарь с двумя ключами для имени шрифта и размера шрифта, и все.Я полагаю, что «это не работает» также является ответом на то, что что-то должно работать в соответствии с документацией ...

Вы можете попробовать symbolicTraits, но это тоже не полезно: он возвращает «жирный», только если вся семья шрифтов выделено жирным шрифтом.

4

Я понял, как получить веса шрифта, вы должны spelunk до основного текста:

 let ctFont = font as CTFont 
     let traits = CTFontCopyTraits(ctFont) 
     let dict = traits as Dictionary 

     if let weightNumber = dict[kCTFontWeightTrait] as? NSNumber { 
      print(weightNumber.doubleValue) 
     } 

Наслаждайтесь!

+0

Спасибо! Один лайнер для определения признаков в Objective-C: 'NSDictionary * traits = (__bridge NSDictionary *) CTFontCopyTraits ((CTFontRef) someFont);' –

Смежные вопросы