我使用以下代碼覆蓋了我應用程序中的所有字體。我花了幾個小時才弄明白這一點,但字體被覆蓋,正常功能會中斷(例如:UITableViewCell
上的長按手勢),並且UIBarButtonItem
的所有實例都被截斷,導航欄中只顯示...
。重寫UIFonts時__NSPlaceholderDictionary崩潰
崩潰總是導致
*終止應用程序由於未捕獲的異常 'NSInvalidArgumentException',原因是:「* - [__ NSPlaceholderDictionary initWithObjects:forKeys:數:]:嘗試從物體插入零對象[0]」
//.h
@interface UIFont (SystemFontOverride)
@end
//.m
@implementation UIFont (SystemFontOverride)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"
+ (UIFont *)boldSystemFontOfSize:(CGFloat)fontSize {
return [UIFont fontWithName:@"HelveticaNeue-Regular" size:fontSize];
}
+ (UIFont *)systemFontOfSize:(CGFloat)fontSize {
return [UIFont fontWithName:@"HelveticaNeue-Thin" size:fontSize];
}
+ (UIFont *)italicSystemFontOfSize:(CGFloat)fontSize {
return [UIFont fontWithName:@"HelveticaNeue-ThinItalic" size:fontSize];
}
#pragma clang diagnostic pop
@end
我做錯了什麼?有沒有更好的方式來覆蓋字體,而無需手動設置每個標籤,細分控制等......這個應用程序不會在應用程序商店,所以我打開任何建議。
獎勵問題,#pragma clang diagnostic pop
和#pragma clang diagnostic push
。我瞭解它保存編譯器的狀態,靜默警告,然後恢復狀態。我可以離開只是#pragma clang diagnostic ignored
?
永不覆蓋方法在Objective-C類別中。這是未定義的行爲,並導致不好的事情發生。 – rmaddy
有關如何更改我所有字體的任何建議。使用UI_APPEARENCE修飾,但缺點是不是所有我的標籤都是相同的字體大小,我不能改變字體,沒有指定大小 – Multinerd
而不是嘗試替換類別中的標準'UIFont'方法,將自己的方法添加到類別。示例 - 不是重寫'boldSystemFontOfSize:',而是將其命名爲'myBoldSystemFontOfSize:'。或者使用'UI_APPEARANCE'或使用'label.font = [label.font fontWithSize:newSize];'更改標籤的字體大小。 – rmaddy