11

我需要获取有关我的属性字符串的信息,但不知道如何。我得到这本字典:

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

4 回答 4

15

您从以下位置获取字体:

UIFont *font = attrs[NSFontAttributeName];

问题是确定它是否是粗体。没有财产。唯一的选择是查看fontName字体,看看是否包含“粗体”或其他类似术语。并非所有粗体字体的名称中都有“粗体”。

同样的问题适用于确定字体是斜体还是注释。您必须查看fontName并寻找诸如“斜体”或“斜体”之类的东西。

于 2013-11-04T17:17:39.820 回答
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等。

于 2013-11-04T17:37:28.860 回答
0

您可以在此示例中查看如何获取有关属性字符串的信息,该示例检查标签的属性文本的子字符串是否为粗体。

-(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;
}
于 2016-03-29T10:58:03.350 回答
0

运行 iOS 10.0 swift 3.0 的更新和代码Ashok解决方案已成为类似的东西。

let fontDescription = focus.font?.fontDescriptor
let fontAttributes = fontDescription!.fontAttributes[kCTFontNameAttribute as String]!
于 2016-12-20T13:11:52.937 回答