NSAttributedString-получить атрибуты шрифта
мне нужно получить информацию о моей приписываемой строке, но не могу понять, как. Я получаю этот словарь:
2013-11-04 18:06:10.628 App[1895:60b] {
NSColor = "UIDeviceWhiteColorSpace 0.3 1";
NSFont = "<UICTFont: 0x17d8d4c0> font-family: ".HelveticaNeueInterface-MediumP4"; font-weight: bold; font-style: normal; font-size: 17.00pt";
NSUnderline = 0;
}
легко проверить подчеркивание с помощью:
[attrs objectForKey:@"NSUnderline"]
но как получить информацию о шрифте, таком как стиль шрифта, вес шрифта и т. д.
Спасибо за помощь
4 ответов
вы получаете шрифт от:
UIFont *font = attrs[NSFontAttributeName];
проблема заключается в определении того, является ли он жирным шрифтом или нет. Для этого нет никакой собственности. Единственный вариант-посмотреть на fontName
шрифта и посмотреть, содержит ли "полужирный" или какой-либо другой аналогичный термин. Не все жирные шрифты имеют "жирный" в названии.
та же проблема применяется для определения шрифта курсивом или Примечание. Вы должны посмотреть на fontName
и ищите такие вещи, как" Курсив "или"косой".
UIFont
имеет запуск fontDescriptor С iOS7 так что вы можете попробовать это..
// Returns a font descriptor which describes the font.
- (UIFontDescriptor *)fontDescriptor NS_AVAILABLE_IOS(7_0);
использование:
// To get font size from attributed string's attributes
UIFont *font = attributes[NSFontAttributeName];
UIFontDescriptor *fontProperties = font.fontDescriptor;
NSNumber *sizeNumber = fontProperties.fontAttributes[UIFontDescriptorSizeAttribute];
NSLog(@"%@, FONTSIZE = %f",fontProperties.fontAttributes, [sizeNumber floatValue]);
аналогично UIFontDescriptorSizeAttribute
вы можете найти другие черты, такие как UIFontDescriptorFaceAttribute
, UIFontDescriptorNameAttribute
etc как упомянуто в документах.
вы можете увидеть, как получить информацию о вашей приписываемой строке в этом примере, который проверяет, является ли подстрока attributedText метки полужирным шрифтом.
-(BOOL)isLabelFontBold:(UILabel*)label forSubstring:(NSString*)substring
{
NSString* completeString = label.text;
NSRange boldRange = [completeString rangeOfString:substring];
return [self isLabelFontBold:label forRange:boldRange];
}
-(BOOL)isLabelFontBold:(UILabel*)label forRange:(NSRange)range
{
NSAttributedString * attributedLabelText = label.attributedText;
__block BOOL isRangeBold = NO;
[attributedLabelText enumerateAttribute:NSFontAttributeName inRange:range options:0 usingBlock:^(UIFont *font, NSRange range, BOOL *stop) {
if (font) {
if ([self isFontBold:font]){
isRangeBold = YES;
}
}
}];
return isRangeBold;
}
-(BOOL)isFontBold:(UIFont*)font
{
UIFontDescriptor *fontDescriptor = font.fontDescriptor;
UIFontDescriptorSymbolicTraits fontDescriptorSymbolicTraits = fontDescriptor.symbolicTraits;
BOOL isBold = (fontDescriptorSymbolicTraits & UIFontDescriptorTraitBold) != 0;
return isBold;
}
обновление под управлением iOS 10.0 swift 3.0 и кода Ашок решение стало чем-то в этом роде.
let fontDescription = focus.font?.fontDescriptor
let fontAttributes = fontDescription!.fontAttributes[kCTFontNameAttribute as String]!