如何更改标签的字体而不是其他内容?

时间:2014-09-19 07:29:30

标签: ios objective-c ios7 fonts

当我在UILabel上以类似方式设置字体时,有时它完全符合我的要求,但是对于某些字体,它也会改变字体大小。这是不可取的。这是我的代码:

+(void)setFontFamily:(NSString*)fontFamily forView:(UIView*)view andSubViews:(BOOL)isSubViews {
    if ([view isKindOfClass:[UILabel class]] ||
        [view isKindOfClass:[UITextField class]] ||
        [view isKindOfClass:[UIButton class]]) {
        UILabel *lbl = (UILabel *)view;
        [lbl setFont:[UIFont fontWithName:fontFamily size:[[lbl font] pointSize]]];
    }

    if (isSubViews) {
        for (UIView *sview in view.subviews) {
            [self setFontFamily:fontFamily forView:sview andSubViews:YES];
        }
    }
}

几个月前我从SO的答案中复制了这个。到目前为止它一直有效,但某些字体似乎不在某些font sizes之下。例如,我有一个名为KozGoPro-ExtraLight的字体,当我将其设置为大小为12的标签时,它仍然是,但更改字体。我有字体KozGoP6N-Light(它出现在同一个包中),当我应用这个时,我的标签的font size从12变为17(17以下的任何数字变为17)。

为什么会这样?它与我正在使用的代码有关,还是Apple的另一个怪癖?我可以修理它,例如我可以更改代码,以便在不能更改字体的同时不会提高字体大小吗?

  • 我在iOS7上测试
  • 我正在使用xcode 5.1.1

如果我记录以下行,这就是我得到的

NSLog(@"before:\n %@\n%f\n%f",[UIFont fontWithName:fontFamily size:[[lbl font] pointSize]],[[lbl font] pointSize],[lbl minimumScaleFactor]);
//set new font
NSLog(@"after:\n %@\n%f\n%f",[UIFont fontWithName:fontFamily size:[[lbl font] pointSize]],[[lbl font] pointSize],[lbl minimumScaleFactor]);

日志:

2014-09-19 12:37:06.287 rendezvouswebrtcbullshittestproject[876:60b] before:
 <UICTFont: 0x1559d4e0> font-family: "KozGoPro-ExtraLight"; font-weight: normal; font-style: normal; font-size: 15.00pt
15.000000
0.000000
2014-09-19 12:37:06.288 rendezvouswebrtcbullshittestproject[876:60b] after:
 <UICTFont: 0x1559d4e0> font-family: "KozGoPro-ExtraLight"; font-weight: normal; font-style: normal; font-size: 15.00pt
15.000000
0.000000
2014-09-19 12:37:06.296 rendezvouswebrtcbullshittestproject[876:60b] before:
 <UICTFont: 0x156a0930> font-family: "KozGoPr6N-Light"; font-weight: normal; font-style: normal; font-size: 15.00pt
15.000000
0.000000
2014-09-19 12:37:06.297 rendezvouswebrtcbullshittestproject[876:60b] after:
 <UICTFont: 0x156a0930> font-family: "KozGoPr6N-Light"; font-weight: normal; font-style: normal; font-size: 15.00pt
15.000000
0.000000

0 个答案:

没有答案