tipografĂ­a sfprodisplay san icon human hello guidelines francisco font developer apple app ios ios7 uifont system-font

sfprodisplay - Diferente fuente de System Medium en iOS 7



sf hello (3)

Corriendo en este problema también y estos son mis hallazgos. Esto es un verdadero desastre.

No hay fuente de sistema Medium en iOS7, lo agregaron en iOS 8.2. En iOS7, después de un largo retraso, está eligiendo la primera fuente en orden alfabético (grabado de la Academia).

Curiosamente, la fuente del sistema en negrita iOS 7 es en realidad una fuente Medium Helvetica Neue:

(lldb) po [UIFont boldSystemFontOfSize:12] <UICTFont: 0x12c58f8b0> font-family: ".HelveticaNeueInterface-MediumP4"; font-weight: bold; font-style: normal; font-size: 12.00pt

y el systemFont es un Helvetica Neue regular.

La Solución para iOS 7 es elegir la fuente del Sistema Negrita en el constructor de interfaz, se ve más delgada cuando se ejecuta en un dispositivo iOS7 que en el constructor de interfaz. Desafortunadamente, en iOS8 e iOS9, realmente parece audaz y no medio ...

Terminé cambiando a Helvetica-Neue Medium para esos casos, lo que desafortunadamente significa que no coinciden las fuentes del sistema / San Francisco y Helvetica-Neue en algunas de mis pantallas en iOS 9. No puedo esperar a que la luz verde deje de funcionar. para iOS7.

Estoy configurando una fuente de System Medium en el guión gráfico de esta manera:

Y este es el resultado para iOS 8 :

Pero iOS 7 muestra una fuente diferente (extraña):

¿Estoy arreglando algo mal?


compruebe el número de versión y si es menor que 8 cambie la fuente programáticamente en su viewDidLoad:

if !NSProcessInfo().isOperatingSystemAtLeastVersion(NSOperatingSystemVersion(majorVersion: 8, minorVersion: 0, patchVersion: 0)) { //change font }


Utilizo el método swizzling para solucionar este error de iOS 7. Mi enfoque funciona bien con Interface Builder.

UIFont + Swizzling.h

@import UIKit; @interface UIFont (UIFont_Swizzle) @end

UIFont + Swizzling.m

#import "UIFont+Swizzle.h" @import ObjectiveC.runtime; @implementation UIFont (UIFont_Swizzle) + (void)load { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ if ([NSProcessInfo instancesRespondToSelector:@selector(operatingSystemVersion)]) return; Class class = object_getClass((id)self); SEL originalSelector = @selector(fontWithDescriptor:size:); SEL swizzledSelector = @selector(swizzled_fontWithDescriptor:size:); Method originalMethod = class_getClassMethod(class, originalSelector); Method swizzledMethod = class_getClassMethod(class, swizzledSelector); BOOL didAddMethod = class_addMethod(class, originalSelector, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod)); if (didAddMethod) { class_replaceMethod(class, swizzledSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod)); } else { method_exchangeImplementations(originalMethod, swizzledMethod); } }); } + (UIFont *)swizzled_fontWithDescriptor:(UIFontDescriptor *)descriptor size:(CGFloat)pointSize { id usageAttribute = descriptor.fontAttributes[@"NSCTFontUIUsageAttribute"]; if (!descriptor.fontAttributes[UIFontDescriptorNameAttribute] && [usageAttribute isKindOfClass:[NSString class]] && [usageAttribute isEqualToString:@"CTFontMediumUsage"]) { descriptor = [descriptor fontDescriptorByAddingAttributes:@{UIFontDescriptorNameAttribute: @"HelveticaNeue-Medium"}]; } id font = [self swizzled_fontWithDescriptor:descriptor size:pointSize]; return font; } @end

Un agradecimiento especial para el creador de Xtrace :)