我使用以下代码覆盖了我的应用中的所有字体。我需要花费数小时来解决这个问题,但是如果字体被覆盖,则正常功能会中断(例如:UITableViewCell
上的长按手势),并且所有UIBarButtonItem
截断的实例仅显示...
在导航栏中。
崩溃总是导致
*由于未捕获的异常终止应用程序' NSInvalidArgumentException',原因:' * - [__ NSPlaceholderDictionary initWithObjects:forKeys:count:]:尝试从中插入nil对象对象[0]'
//.h
@interface UIFont (SystemFontOverride)
@end
//.m
@implementation UIFont (SystemFontOverride)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"
+ (UIFont *)boldSystemFontOfSize:(CGFloat)fontSize {
return [UIFont fontWithName:@"HelveticaNeue-Regular" size:fontSize];
}
+ (UIFont *)systemFontOfSize:(CGFloat)fontSize {
return [UIFont fontWithName:@"HelveticaNeue-Thin" size:fontSize];
}
+ (UIFont *)italicSystemFontOfSize:(CGFloat)fontSize {
return [UIFont fontWithName:@"HelveticaNeue-ThinItalic" size:fontSize];
}
#pragma clang diagnostic pop
@end
我做错了什么?是否有更好的方法来覆盖字体而无需手动设置每个标签,段控制等...这个应用程序不会在应用程序商店,所以我打开任何建议。
红利问题,#pragma clang diagnostic pop
和#pragma clang diagnostic push
。我理解它保存编译器的状态,静音警告,然后恢复状态。我可以逃脱#pragma clang diagnostic ignored
吗?
答案 0 :(得分:0)
您也可以将UILabel子类化并在任何地方使用它:
例如,在init方法中调用setFont,
然后只需找到并替换UILabel和您的子类
答案 1 :(得分:0)
为了将此标记为已回答,我正在关注rmaddy的评论
不要尝试替换类别中的标准UIFont方法,而是将自己的方法添加到类别中。示例 - 而不是覆盖boldSystemFontOfSize:,将其命名为myBoldSystemFontOfSize:。或者使用UI_APPEARANCE或使用label.font = [label.font fontWithSize:newSize]更改标签的字体大小;
我走了UI_APPEARANCE
路线
[[UILabel appearance] setFont:[UIFont fontWithName:fontName size:fontSize]];
如果您的标签需要不同的字体大小,这可能会有问题,幸运的是,我需要更改的标签都是相同的字体大小