Sto installando un font System Medium
su storyboard come questo:diverso sistema su iOS 7
E questo è il risultato per iOS 8
:
Ma iOS 7
sta mostrando un diverso (strano) carattere:
Sto impostando qualcosa di sbagliato?
Sto installando un font System Medium
su storyboard come questo:diverso sistema su iOS 7
E questo è il risultato per iOS 8
:
Ma iOS 7
sta mostrando un diverso (strano) carattere:
Sto impostando qualcosa di sbagliato?
Correndo anche su questo problema e questo è il mio risultato. Questo è un vero casino.
Non c'è un carattere di sistema Medio su iOS7, è stato aggiunto in iOS 8.2. Su iOS7, dopo un lungo ritardo, sta selezionando il primo carattere in ordine alfabetico (Academy Engraved).
interessante il carattere di sistema grassetto IOS 7 è in realtà un font medio Helvetica Neue:
(lldb) po [UIFont boldSystemFontOfSize:12]
<UICTFont: 0x12c58f8b0> font-family: ".HelveticaNeueInterface-MediumP4"; font-weight: bold; font-style: normal; font-size: 12.00pt
e SystemFont è un Helvetica Neue regolare.
La soluzione alternativa per iOS 7 è quella di selezionare il font System Bold nel generatore di interfacce, sembra più sottile quando è in esecuzione su un dispositivo iOS7 rispetto a quello sul generatore di interfacce. Sfortunatamente, su iOS8 e iOS9, sembra davvero audace e non medio ...
Ho finito per passare a Helvetica-Neue Medium per quei casi che, sfortunatamente, significa che ho una mancata corrispondenza di font di sistema/San Francisco e Helvetica-Neue in alcuni dei miei schermi su iOS 9. Non vedo l'ora di ottenere la luce verde per far cadere il supporto per iOS7.
controllo il numero di versione e se inferiore a 8 il cambiamento del carattere programmatico nel viewDidLoad:
if !NSProcessInfo().isOperatingSystemAtLeastVersion(NSOperatingSystemVersion(majorVersion: 8, minorVersion: 0, patchVersion: 0)) {
//change font
}
Io uso il metodo swizzling per risolvere questo iOS 7 bug. Il mio approccio funziona bene 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 ringraziamento speciale per Xtrace s' creatore :)
Questa dovrebbe essere la risposta accettata –