2015-01-07 15 views
6

Có cách nào để bỏ qua hoàn toàn cài đặt loại động/kích thước phông chữ trong ứng dụng iOS không? Tôi có nghĩa là có một cách như một mục nhập plist để tôi có thể vô hiệu hóa nó hoàn toàn. Tôi hiểu có một thông báo chúng tôi có thể quan sát và định cấu hình lại phông chữ bất cứ khi nào có thay đổi trong cài đặt. Tôi đang tìm một giải pháp đơn giản hơn. Tôi đang sử dụng iOS8. Cảm ơn.Bỏ qua loại động trong iOS: Khả năng truy cập

+0

động loại là cái gì đó bạn phải chủ động thực hiện (hoặc ít nhất là chọn trong bộ dựng giao diện). Nó không * chỉ hoạt động *. –

+1

Nếu tôi đi và thay đổi kích thước phông chữ trong ứng dụng cài đặt của điện thoại và quay lại ứng dụng của tôi, phông chữ sẽ bị thay đổi. Tôi đã không làm gì cho việc này. – sole007

+0

Bạn đang sử dụng phông chữ nào trong Trình tạo giao diện? –

Trả lời

1

Trong AppDelegate add bạn:

#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

Có phiên bản Swift của mã trên không? – zeeple

+0

@zeeple Nên có thể. Tôi chỉ có nó trong Obj-C. Tôi đã cố gắng nhanh chóng chuyển đổi sang Swift 2.2, nhưng điều này đòi hỏi phải phân loại tất cả các loại bộ chọn Swift điển hình và các vấn đề liên quan đến kiểu; không có thời gian để làm điều đó ngay bây giờ. Vui lòng đăng câu trả lời bằng phiên bản Swift của bạn. –

+0

Plz chuyển đổi mã swift. – Singapore

0

Các nhanh chóng tương đương với câu trả lời của @ có nghĩa là-những vấn đề trông như sau:

Trong appdelegate của bạn:

@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

Khi tôi cố gắng sử dụng điều này, tôi nhận được lỗi trình biên dịch: 'Sử dụng định danh chưa được giải quyết 'preferredContentSizeCategory''. Có cái gì khác cần thiết để làm cho nó hoạt động? –

+0

Dự đoán tốt nhất của tôi là thay đổi các bộ chọn thành 'getter: UIApplication.preferredContentSizeCategory' và' MyAppDelegate.swizzled_preferredContentSizeCategory' cùng với một vài thay đổi khác, xóa các lỗi trình biên dịch nhưng dường như không làm gì khi nó chạy. –

Các vấn đề liên quan