2015-01-07 4 views
6

Есть ли способ полностью игнорировать параметры динамического типа/размера шрифта в приложениях iOS? Я имею в виду, есть способ, как запись plist, так что я могу полностью отключить его. Я понимаю, что есть уведомление, которое мы можем наблюдать и перенастраивать шрифт всякий раз, когда происходят изменения в настройках. Я ищу более простое решение. Я использую iOS8. Спасибо.Игнорирование динамического типа в iOS: Доступность

+0

Динамический тип что вы должны активно реализовывать (или, по крайней мере, выбирать внутри Interface Builder). Это не * просто работает *. –

+1

Если я поеду и изменим размер шрифта в приложении настроек телефона и вернусь в свое приложение, шрифт изменится. Я ничего не сделал для этого. – sole007

+0

Какой шрифт вы используете в Interface Builder? –

ответ

1

В вашем AppDelegate добавить:

#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

Есть ли быстрая версия вышеуказанного кода? – zeeple

+0

@zeeple Должно быть возможно. У меня есть только в Obj-C. Я попытался быстро преобразовать в Swift 2.2, но для этого требуется сортировка всех типов типичных селекторов Swift и связанных с ним типов; не успели сделать это сейчас. Отправьте ответ со своей версией Swift. –

+0

Plz конвертировать быстрый код. – Singapore

0

Стремительное эквивалентно ответу @ осмысленные вопросы, выглядит следующим образом:

В вашем 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

Когда я пытаюсь использовать это, я получаю ошибки компилятора: «Использовать неразрешенный идентификатор« preferredContentSizeCategory ». Есть ли что-то еще, что необходимо для его работы? –

+0

Мое лучшее предположение заключалось в том, чтобы сменить селекторы на 'getter: UIApplication.preferredContentSizeCategory' и' MyAppDelegate.swizzled_preferredContentSizeCategory', а также пару других изменений, которые очистили ошибки компилятора, но при запуске ничего не делают. –

Смежные вопросы