如何在ios应用程序中将自定义字体系列设置为系统字体

Jay*_*dya 8 fonts uiapplication ios

我正在开发一个ios应用程序,我必须使用UI的自定义字体.我知道如何在应用程序中集成新的自定义字体.为此我有

  1. 使用.ttf扩展名下载字体系列文件.
  2. 将它们添加到资源包中.
  3. 在info.plist文件中添加应用程序提供的关键字体.

此自定义字体显示效果.但我想要做的是,我想将它们设置为systemFont.所以我不必在所有UI元素中设置它们.

我想要类似的东西

[[UIApplication sharedApplication] systemFont:@"Arial"];
Run Code Online (Sandbox Code Playgroud)

这可能吗?谁能帮我这个?

mat*_*odv 16

在为iOS 7更新我的iOS应用程序时遇到了同样的问题.我想为整个应用程序设置自定义字体,即使对于不允许自定义字体的控件(例如选择器)也是如此.
经过对网络和Twitter的一些研究后,我解决了使用Method Swizzling的做法,这是一种交换方法实现的做法.

注意:如果不小心使用,此方法可能会有危险!阅读关于SO的讨论:Method Swizzling的危险

但是,这是做什么的:

  1. 创建一个UIFont类别,如UIFont + CustomSystemFont.
  2. 导入<objc/runtime.h>.m文件.
  3. 保留.h文件未修改,并将此代码添加到.m:
+(UIFont *)regularFontWithSize:(CGFloat)size
{
  return [UIFont fontWithName:@"Your Font Name Here" size:size];
}

+(UIFont *)boldFontWithSize:(CGFloat)size
{
  return [UIFont fontWithName:@"Your Bold Font Name Here" size:size];
}
Run Code Online (Sandbox Code Playgroud)

//方法调整

+(void)load
{
    SEL original = @selector(systemFontOfSize:);
    SEL modified = @selector(regularFontWithSize:);
    SEL originalBold = @selector(boldSystemFontOfSize:);
    SEL modifiedBold = @selector(boldFontWithSize:);

    Method originalMethod = class_getClassMethod(self, original);
    Method modifiedMethod = class_getClassMethod(self, modified);
    method_exchangeImplementations(originalMethod, modifiedMethod);

    Method originalBoldMethod = class_getClassMethod(self, originalBold);
    Method modifiedBoldMethod = class_getClassMethod(self, modifiedBold);
    method_exchangeImplementations(originalBoldMethod, modifiedBoldMethod);
}
Run Code Online (Sandbox Code Playgroud)

  • 奇怪的是,我的所有视图都不起作用:例如,UITextView占位符中使用的字体仍然是原始系统字体.你有解决方案吗? (2认同)