2012-05-01 2 views
32

-systemFontOfSize слишком тонкий, и полужирныйSystemFontOfSize слишком толстый. Мне нужно что-то между ними.Есть ли шрифт среднего веса между -системойFontOfSize: и -boldSystemFontOfSize :?

Когда я создаю UIFont так:

[UIFont boldSystemFontOfSize:14]; 

то отладчик печатает этот шрифт Информация:

семейство шрифтов: ".Helvetica NeueUI"; font-weight: Полужирный; font-style: normal; font-size: 14px

Иногда шрифты имеют средний вес шрифта. Как создать шрифт этого типа, но со средним весом?

ответ

24

Вызов NSLog(@"%@", [UIFont fontNamesForFamilyName:@"Helvetica Neue"]); печатает все доступные стили шрифтов для Helvetica Neue, среди них HelveticaNeue-Medium, который звучит, как тот, который вы хотите:

UIFont *font = [UIFont fontWithName:@"HelveticaNeue-Medium" size:14.0f]; 

Если вы хотите, чтобы убедиться, что шрифт также меняется при изменении системы шрифтов (например, как это было с сетчаткой устройств от Helvetica до Helvetica Neue) можно сначала получить системный шрифт, а затем принять его familyName и pointSize, чтобы получить один со средней массой с помощью + fontNamesForFamilyName, а затем + fontWithName:size:

+1

'boldSystemFontOfSize' уже используют HelveticaNeue-Medium ... – fabb

+0

Это не тот же шрифт, что и версия пользовательского интерфейса. По моему опыту он отличается, по крайней мере, атрибутами вертикального интервала и возвращает другой результат, когда вы получаете свойство size из атрибутивной строки. –

+1

@ Ben-Uri Системный шрифт изменился с тех пор, как я написал этот ответ. Ответ Андрея сейчас больше. – JustSid

71

Стартин г с iOS 8.2 вы можете использовать:

[UIFont systemFontOfSize:14 weight:UIFontWeightMedium]; 
+1

Обратите внимание, что 'UIFontWeightMedium' является CGFloat, а не enum – onmyway133

16

Swift 2,0, xcode7.1

if #available(iOS 8.2, *) { 
    titleLabel?.font = UIFont.systemFontOfSize(15, weight: UIFontWeightMedium) 
} else { 
    titleLabel?.font = UIFont(name: "HelveticaNeue-Medium", size: 15) 
} 
+0

Что происходит в iOS 8.2, если я не использую оператор if, и я просто использую titleLabel? .font = UIFont (name:" HelveticaNeue-Medium ", размер: 15) – Jace

0

Swift 2.3 и не изменяя размер шрифта:

extension UIFont { 
    var mediumFont: UIFont { 
     return UIFont.systemFontOfSize(self.pointSize, weight: UIFontWeightMedium) 
    } 
} 

Использование с:

titleLabel.font = titleLabel.font.mediumFont 
4

Свифт 3:

UIFont.systemFont(ofSize: 14, weight: UIFontWeightMedium) 
0

С Swift 4 добавить это расширение

extension UIFont { 
    class func mediumSystemFont(ofSize pointSize:CGFloat) -> UIFont { 
     return self.systemFont(ofSize: pointSize, weight: .medium) 
    } 
} 

Тогда:

myLabel.font = UIFont.mediumSystemFont(ofSize: 16) 

Тот же принцип работает с полужирным, черным и т.д., проверить UIFont.Weight

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