Как получить размер шрифта экземпляра UIFont?
Или, если кто-то может реализовать этот метод для UIFont?
- (UIFont *)boldFont;
Как получить размер шрифта экземпляра UIFont?
Или, если кто-то может реализовать этот метод для UIFont?
- (UIFont *)boldFont;
UIFontDescriptor
- довольно мощный класс и может использоваться для получения полужирной версии нужного шрифта. Он должен быть полностью безопасным и будущим, поскольку он требует использования публичного API и не зависит от каких-либо модификаций строк.
Вот код в Swift 3:
extension UIFont {
func bold() -> UIFont? {
let fontDescriptorSymbolicTraits: UIFontDescriptorSymbolicTraits = [fontDescriptor.symbolicTraits, .traitBold]
let bondFontDescriptor = fontDescriptor.withSymbolicTraits(fontDescriptorSymbolicTraits)
return bondFontDescriptor.flatMap { UIFont(descriptor: $0, size: pointSize) }
}
}
Вот код в objective-c:
@implementation UIFont (RABoldFont)
- (UIFont *)ra_boldFont
{
UIFontDescriptor *fontDescriptor = [self fontDescriptor];
UIFontDescriptorSymbolicTraits traits = fontDescriptor.symbolicTraits;
traits = traits | UIFontDescriptorTraitBold;
UIFontDescriptor *boldFontDescriptor = [fontDescriptor fontDescriptorWithSymbolicTraits:traits];
return [UIFont fontWithDescriptor:boldFontDescriptor size:self.pointSize];
}
@end
Это старый ответ, и это больше не лучшее решение, пожалуйста, см. принятый ответ.
-(UIFont *)boldFont{
//First get the name of the font (unnecessary, but used for clarity)
NSString *fontName = self.fontName;
//Some fonts having -Regular on their names. so we have to remove that before append -Bold / -BoldMT
fontName = [[fontName componentsSeparatedByString:@"-"] firstObject];
//Then append "-Bold" to it.
NSString *boldFontName = [fontName stringByAppendingString:@"-Bold"];
//Then see if it returns a valid font
UIFont *boldFont = [UIFont fontWithName:boldFontName size:self.pointSize];
//If it valid, return it
if(boldFont) return boldFont;
//Seems like in some cases, you have to append "-BoldMT"
boldFontName = [fontName stringByAppendingString:@"-BoldMT"];
boldFont = [UIFont fontWithName:boldFontName size:self.pointSize];
//Here you can check if it was successful, if it wasn't, then you can throw an exception or something.
return boldFont;
}
Чтобы получить доступ к размеру шрифта из вашего экземпляра UIFont, используйте
@property(nonatomic, readonly) CGFloat pointSize
Есть больше свойств, чтобы сообщить размер шрифта (для cap, small и т.д.)
capHeight,xHeight,pointSize
Используйте ниже, чтобы получить жирный шрифт
UIFont* myboldFont = [UIFont boldSystemFontOfSize:11];
Вот самый простой способ найти размер шрифта
UIFont *anyFont;
//initialization and other stuff here
Теперь в какой-то момент вы хотите найти его размер
CGFloat fontSize= [anyFont pointSize];
Используйте методы NSString + UIKit для измерения размера строки с определенным шрифтом.
iPhone обрабатывает обычные и полужирные шрифты с тем же именем, что и полностью отдельные шрифты, и поэтому нет простого способа конвертировать между ними. Например, ArialMT и Arial-BoldMT считаются полностью разными шрифтами ОС.
EDIT: Возможно, я неправильно понял ваш вопрос. Возможно, вы ищете свойство pointSize для UIFont?
Вы можете проверить выделение жирным шрифтом с помощью основного текста. Используйте kCTFontBoldTrait
.
Swift 3 версия rafał-augustyniak ответ
extension UIFont {
func boldFont() -> UIFont? {
let fontDescriptor = self.fontDescriptor
let fontDescriptorSymbolicTraits: UIFontDescriptorSymbolicTraits = [ fontDescriptor.symbolicTraits, .traitBold ]
guard let boldFontDesc = fontDescriptor.withSymbolicTraits(fontDescriptorSymbolicTraits) else {
return nil
}
return UIFont(descriptor: boldFontDesc, size: pointSize)
}
}