NSAttributedString – 获取字体属性

我需要得到我的属性string的信息,但不知道如何。 我收到这本字典:

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"] 

但是如何获得像字体样式,字体重量等字体的信息。

谢谢你的帮助

您从以下位置获取字体:

 UIFont *font = attrs[NSFontAttributeName]; 

问题是确定是否大胆。 这没有财产。 唯一的select是查看字体的fontName ,看是否包含“粗体”或其他类似的术语。 并不是所有的粗体字都有“粗体”的名字。

同样的问题适用于确定字体是斜体还是笔记。 您必须查看fontName并查找诸如“Italic”或“Oblique”之类的内容。

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类似,您可以find其他特征,如文档中提到的UIFontDescriptorFaceAttributeUIFontDescriptorNameAttribute等。

在这个例子中,你可以看到如何获得关于你的属性string的信息,检查一个标签的属性文本的子string是否为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; } 

运行iOS 10.0 swift 3.0和代码Ashok解决scheme的更新已经成为了一些东西。

 let fontDescription = focus.font?.fontDescriptor let fontAttributes = fontDescription!.fontAttributes[kCTFontNameAttribute as String]!