1

我想调整一些 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

但是我怎样才能访问字体粗细?

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

4

4 回答 4

6

我已经想出了如何获得字体粗细,你必须深入研究核心文本:

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

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

享受!

于 2017-04-19T22:41:55.820 回答
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/以获取可用的字体名称。

于 2013-08-20T10:09:51.270 回答
2

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

如果你想使用粗体系统字体,那么你可以简单地使用

[UIFont boldSystemFontOfSize:15.0]; 

但是,我仍在考虑您需要使用的特殊情况font-weight

更新 :

类中没有UIFont可以font-weight直接使用的内容。你可以看看UIFont Class Reference

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

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

于 2013-08-20T10:08:49.580 回答
1

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

现在它经过测试:不起作用。fontAttributes 总是返回一个字典,其中包含字体名称和字体大小的两个键,仅此而已。我想“这不起作用”也是一个答案,当某些东西根据文档应该起作用时......

您可以尝试 symbolicTraits,但这也没有用:只有当整个字体系列都是粗体时,它才会返回“粗体”。

于 2015-10-27T17:15:00.713 回答