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其他特征,如文档中提到的UIFontDescriptorFaceAttribute
, UIFontDescriptorNameAttribute
等。
在这个例子中,你可以看到如何获得关于你的属性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]!