gpt4 book ai didi

iphone - iOS 7 和 Helvetica Neue UltraLight : use as default for older iOS versions

转载 作者:技术小花猫 更新时间:2023-10-29 10:55:35 25 4
gpt4 key购买 nike

据我所知,iOS 7 的默认字体是 Helvetica Neue UltraLight,与它的粗体前身相比要细很多。为了提供一致的设计并使我即将推出的应用程序在所有常见的 iOS 版本中看起来都一样,我想应用 Helvetica Neue UltraLight 作为应用程序的默认(主要)字体。

很高兴,这个“新字体”可用since iOS version 5.0 ,所以它已经被 iOS 7 之前的版本支持。遗憾的是,我想出使用它的唯一方法是手动调用 [UIFont fontWithName:@"HelveticaNeue-UltraLight"size:size]每个 UIView 的字体,繁琐且容易出错,不一致。

所以我的问题是,您是如何做到这一点的,或者您是如何处理这种设计变更的?

最佳答案

这是 Objective-C 运行时解决方案:

@interface UIFont (CustomSystemFont)

+ (UIFont *)ln_systemFontOfSize:(CGFloat)fontSize;
+ (UIFont *)ln_boldSystemFontOfSize:(CGFloat)fontSize;
+ (UIFont *)ln_italicSystemFontOfSize:(CGFloat)fontSize;

@end
@implementation UIFont (CustomSystemFont)

+ (void)load
{
Method orig = class_getClassMethod([UIFont class], @selector(systemFontOfSize:));
Method swiz = class_getClassMethod([UIFont class], @selector(ln_systemFontOfSize:));
method_exchangeImplementations(orig, swiz);

orig = class_getClassMethod([UIFont class], @selector(boldSystemFontOfSize:));
swiz = class_getClassMethod([UIFont class], @selector(ln_boldSystemFontOfSize:));
method_exchangeImplementations(orig, swiz);

orig = class_getClassMethod([UIFont class], @selector(italicSystemFontOfSize:));
swiz = class_getClassMethod([UIFont class], @selector(ln_italicSystemFontOfSize:));
method_exchangeImplementations(orig, swiz);
}

+ (UIFont *)ln_systemFontOfSize:(CGFloat)fontSize
{
if([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0f)
{
//Call original implementation.
return [self ln_systemFontOfSize:fontSize];
}

return [UIFont fontWithName:@"HelveticaNeue" size:fontSize];
}

+ (UIFont *)ln_boldSystemFontOfSize:(CGFloat)fontSize
{
if([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0f)
{
//Call original implementation.
return [self ln_systemFontOfSize:fontSize];
}

return [UIFont fontWithName:@"HelveticaNeue-Medium" size:fontSize];
}

+ (UIFont *)ln_italicSystemFontOfSize:(CGFloat)fontSize
{
if([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0f)
{
//Call original implementation.
return [self ln_systemFontOfSize:fontSize];
}

return [UIFont fontWithName:@"HelveticaNeue-Italic" size:fontSize];
}

@end

我在这个例子中所做的是将三个系统字体方法替换为我自己的并测试系统版本是否为 7 或更高版本。如果是,我使用原始方法,否则返回我选择的字体(在这种情况下,Helvetica Neue 具有 UltraLight weight 用于常规和斜体请求,Medium weight 用于粗体请求)。

这适用于代码中生成的所有内容,包括系统创建的 View 。从 Xib 和 Storyboard 文件加载 View 时它不起作用,因为字体在 NIB 文件本身中是硬编码的。使用字体选择器选择您需要的字体。

关于iphone - iOS 7 和 Helvetica Neue UltraLight : use as default for older iOS versions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17414630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com