我需要获取有关我的属性字符串的信息,但无法弄清楚如何。我收到这本词典:
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"]
但是如何获取有关字体的信息,如字体样式,字体重量等。
感谢您的帮助
答案 0 :(得分:15)
您从以下字体获取字体:
UIFont *font = attrs[NSFontAttributeName];
问题在于确定它是否是粗体。没有财产。唯一的选择是查看字体的fontName
,看看是否包含“Bold”或其他类似术语。并非所有粗体字体在名称中都有“粗体”。
同样的问题适用于确定字体是斜体还是注释。您必须查看fontName
并查找“Italic”或“Oblique”等内容。
答案 1 :(得分:4)
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
等其他特征。
答案 2 :(得分:0)
您可以在此示例中查看如何获取有关您的属性字符串的信息,以检查标签的attributedText的子字符串是否为BOLD。
-(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;
}
答案 3 :(得分:0)
运行iOS 10.0 swift 3.0的更新和代码Ashok解决方案已成为这些方面的事情。
let fontDescription = focus.font?.fontDescriptor
let fontAttributes = fontDescription!.fontAttributes[kCTFontNameAttribute as String]!