2015-01-07 15 views
6

Esiste un modo per ignorare completamente le impostazioni di tipo dinamico/dimensione carattere nelle app iOS? Voglio dire c'è un modo come una voce plist in modo che io possa disabilitare completamente. Capisco che c'è una notifica che possiamo osservare e riconfigurare il carattere ogni volta che c'è un cambiamento nelle impostazioni. Sto cercando una soluzione più semplice. Sto usando iOS8. Grazie.Ignorare il tipo dinamico in iOS: Accessibilità

+0

tipo dinamico è qualcosa che si implementare attivamente (o almeno selezionare all'interno di Interface Builder). Non funziona * semplicemente *. –

+1

Se vado a cambiare la dimensione del carattere nell'app delle impostazioni del telefono e torno alla mia app, il carattere viene cambiato. Non ho fatto nulla per questo. – sole007

+0

Quale font stai usando in Interface Builder? –

risposta

1

Nel vostro AppDelegate aggiuntivo:

#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

Esiste una versione Swift del codice sopra? – zeeple

+0

@zeeple Dovrebbe essere possibile. L'ho solo in Obj-C. Ho provato a convertire rapidamente in Swift 2.2, ma questo richiede l'ordinamento di tutti i tipi di selettore Swift tipico e il tipo di problemi correlati; non ho tempo per farlo ora Si prega di inviare una risposta con la tua versione Swift. –

+0

Plz converti codice swift. – Singapore

0

La rapida equivalente alla risposta di @ meaning-materia si presenta come segue:

Nel vostro 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

Quando provo ad usarlo, ottengo gli errori del compilatore: 'Uso dell'identificatore non risolto 'preferredContentSizeCategory''. C'è qualcos'altro che è necessario per farlo funzionare? –

+0

La mia ipotesi migliore è stata la modifica dei selettori a 'getter: UIApplication.preferredContentSizeCategory' e' MyAppDelegate.swizzled_preferredContentSizeCategory' insieme ad un paio di altre modifiche, che hanno cancellato gli errori del compilatore ma sembra che non faccia nulla quando viene eseguito. –