2015-01-07 12 views
6

Czy istnieje sposób całkowitego ignorowania ustawień typu dynamicznego/rozmiaru czcionki w aplikacjach na iOS? Chodzi mi o to, że istnieje sposób jak wpis plist, tak, że mogę go całkowicie wyłączyć. Rozumiem, że istnieje powiadomienie, które możemy obserwować i ponownie konfigurować czcionkę, gdy nastąpi zmiana ustawień. Szukam prostszego rozwiązania. Używam iOS8. Dzięki.Ignorowanie typu dynamicznego w systemie iOS: Dostępność

+0

typ dynamiczny jest coś muszą aktywnie implementować (lub przynajmniej wybierać w Konstruktorze interfejsów). To nie * działa po prostu *. –

+1

Jeśli przejdę i zmieniam rozmiar czcionki w aplikacji ustawień telefonu i wrócę do mojej aplikacji, czcionka zostanie zmieniona. Nic nie zrobiłem. – sole007

+0

Jakiej czcionki używasz w programie Interface Builder? –

Odpowiedz

1

W swojej AppDelegate dodają:

#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

Czy istnieje wersja Swift powyższego kodu? – zeeple

+0

@zeeple Powinien być możliwy. Mam go tylko w Obj-C. Próbowałem szybko przekonwertować na Swift 2.2, ale wymaga to uporządkowania wszelkiego rodzaju typowych problemów związanych z selektorem Swift i typem; nie mają teraz czasu, aby to zrobić. Opublikuj odpowiedź w swojej wersji Swift. –

+0

Plz zamienia kod swift. – Singapore

0

Szybkie równoważne odpowiedzią @ znaczeń spraw wygląda następująco:

W swojej 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

Gdy próbuję użyć tego, otrzymuję błędy kompilatora: 'Użyj nierozwiązanego identyfikatora 'preferredContentSizeCategory''. Czy jest coś jeszcze, co jest potrzebne, aby to zadziałało? –

+0

Moim najlepszym przypuszczeniem była zmiana selektorów na 'getter: UIApplication.preferredContentSizeCategory' oraz' MyAppDelegate.swizzled_preferredContentSizeCategory' wraz z kilkoma innymi zmianami, które wyczyściły błędy kompilatora, ale wydaje się, że nic nie robi po uruchomieniu. –

Powiązane problemy