2015-01-07 8 views
6

Gibt es eine Möglichkeit, dynamische Typ-/Schriftgradeinstellungen in iOS-Apps vollständig zu ignorieren? Ich meine, gibt es einen Weg wie ein PLIST Eintrag, so dass ich es vollständig deaktivieren kann. Ich verstehe, dass es eine Benachrichtigung gibt, dass wir die Schriftart beobachten und neu konfigurieren können, wenn sich die Einstellungen ändern. Ich suche nach einer einfacheren Lösung. Ich benutze iOS8. Danke.Ignorieren des dynamischen Typs in iOS: Eingabehilfen

+0

dynamischer Typ ist, dass Sie etwas müssen aktiv implementieren (oder zumindest im Interface Builder auswählen). Es funktioniert nicht * nur *. –

+1

Wenn ich die Schriftgröße in der Einstellungs-App des Telefons ändere und zu meiner App zurückkomme, wird die Schriftart geändert. Ich habe nichts dafür getan. – sole007

+0

Welche Schriftart verwenden Sie in Interface Builder? –

Antwort

1

In Ihrem AppDelegate add:

#import <objc/runtime.h> 

@implementation AppDelegate 

NSString* swizzled_preferredContentSizeCategory(id self, SEL _cmd) 
{ 
    return UIContentSizeCategoryLarge; // Set category you prefer, Large being iOS' default. 
} 

- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions 
{ 
    Method method = class_getInstanceMethod([UIApplication class], @selector(preferredContentSizeCategory)); 
    method_setImplementation(method, (IMP)swizzled_preferredContentSizeCategory); 

    ... 
} 
+0

Gibt es eine schnelle Version des obigen Codes? – zeeple

+0

@zeeple Sollte möglich sein. Ich habe es nur in Obj-C. Ich habe versucht, schnell zu Swift 2.2 zu konvertieren, aber dies erfordert das Aussortieren aller Arten von typischen Swift-Selektoren und typbezogenen Problemen; Habe jetzt keine Zeit, das zu tun. Bitte posten Sie eine Antwort mit Ihrer Swift-Version. –

+0

PLZ konvertieren Swift-Code. – Singapore

0

Die rasche entspricht die Antwort von @ Sinnfragen sehen wie folgt aus:

In Ihrem AppDelegate:

@objc func swizzled_preferredContentSizeCategory() -> UIContentSizeCategory { 
    return UIContentSizeCategory.small 
} 

open func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
    let originalMethod = class_getInstanceMethod(UIApplication.self, #selector(preferredContentSizeCategory)) 
    let swizzledMethod = class_getInstanceMethod(C24AppDelegate.self, #selector(preferredContentSizeCategory)) 
    method_exchangeImplementations(originalMethod, swizzled_preferredContentSizeCategory) 
} 
+0

Wenn ich versuche, dies zu verwenden, erhalte ich Compiler-Fehler: 'Verwendung der unaufgelösten Kennung 'preferredContentSizeCategory''. Gibt es noch etwas, das nötig ist, damit es funktioniert? –

+0

Meine beste Vermutung war, die Selektoren in 'Getter: UIApplication.preferredContentSizeCategory' und' MyAppDelegate.swizzled_preferredContentSizeCategory' mit einigen anderen Änderungen zu ändern, wodurch die Compiler-Fehler behoben wurden, aber es scheint nichts zu tun, wenn es ausgeführt wird. –

Verwandte Themen