获取uitextview的font-weight

时间:2013-08-20 09:20:19

标签: ios objective-c uitextview uifont

我想在一些UITextViews中调整字体大小。这适用于插座集合和此代码:

for (UITextView *view in self.viewsToResize) {
  if ([view respondsToSelector:@selector(setFont:)]) {
     [view setFont:[UIFont systemFontOfSize:view.font.pointSize + 5]];
  }
}

但我的问题是,并非每个textView都使用正常权重的systemFont,其中一些是粗体重的。是否有可能获得字体重量?在调试区域中po view.font,我可以看到我需要的一切:

$11 = 0x0c596ea0 <UICFFont: 0xc596ea0> font-family: "Helvetica"; font-weight: normal; font-style: normal; font-size: 12px

但是如何访问font-weight?

对于大胆的视图使用第二个插座集合可以解决我的问题。但我想知道我没有发现任何东西只能得到字体重量。

4 个答案:

答案 0 :(得分:5)

我已经弄清楚如何获得字体权重,你必须深入到核心文本:

        let ctFont = font as CTFont
        let traits = CTFontCopyTraits(ctFont)
        let dict = traits as Dictionary

        if let weightNumber = dict[kCTFontWeightTrait] as? NSNumber {
            print(weightNumber.doubleValue)
        }

享受!

答案 1 :(得分:3)

UIFont没有粗体/斜体/ ...属性,因此您必须仅依赖于字体名称。 如果您不知道将使用哪种字体,这将是一个问题。

如果您知道将使用例如。只有Helvetica你可以试试这个:

UIFont *font = textview.font;
if([font.fontName isEqualToString:@"Helvetica-Bold"])
    NSLog(@"It's Bold!");

或者你可以在font.fontName中搜索单词“bold”/“medium”/“light”等,但这并不能保证你会得到每种可用字体的东西:

if ([font.fontName rangeOfString:@"bold" options:NSCaseInsensitiveSearch].location == NSNotFound) {
  NSLog(@"font is not bold");
} else {
  NSLog(@"font is bold!");
}
// if font.fontName contains "medium"....
// if font.fontName contains "italic"....

检查http://iosfonts.com/是否有可用的字体名称。

答案 2 :(得分:2)

  

但我的问题是,并非每个textView都使用systemFont   正常体重,其中一些是粗体重。

如果您想使用Bold System Font,那么您只需使用

即可
[UIFont boldSystemFontOfSize:15.0]; 

但是,我仍在考虑您需要使用font-weight

的特殊情况

更新:

UIFont班级中没有任何内容可供您直接使用font-weight。您可以查看UIFont Class Reference

您唯一能做的就是获取font-name并尝试找出字体名称中的“粗体”子字符串。如果发现任何匹配,则表示该特定字体的font-weight为“粗体”。

但是,这仍然不是最有效的方法。

答案 3 :(得分:1)

您可以使用fontDescriptor方法获取字体的UIFontDescriptor。然后你得到UIFontDescriptor的fontAttributes字典,从字典中获取UIFontDescriptorTraitsAttribute,返回另一个字典,然后从该字典中读取UIFontWeightTrait。没有测试过。

现在它经过测试:不起作用。 fontAttributes总是返回一个字典,其中包含两个字体名称和字体大小的键,以及它的字体。我想&#34;这不起作用&#34;当某些事情应该根据文件......

时也是一个答案

你可以试试symbolicTraits,但这也没用:它返回&#34;粗体&#34;仅当整个字体系列为粗体时。