我試圖在iOS應用程序中指定每個標籤的字體系列,以便稍後更改它們。我不想通過Interface Builder並重置每個屏幕上的每個字體。根據this post,我創建了一種方法,可以查找視圖中的所有字體並相應地設置它們。檢測iOS中的燈光字體
在我的情況下,根據字體是粗體,斜體還是淺色(例如骨感),我需要使用幾種不同的字體系列。這些都位於單獨的文件中,如「OpenSans-Semibold.ttf」,「OpenSans-Italic.ttf」和「OpenSans-Light.ttf」。
理想情況下,我希望能夠在Interface Builder中將字體設置爲粗體,斜體或淺色,然後使用相應的.ttf文件使代碼覆蓋字體系列。根據this post,我可以很容易地檢測到字體是否已設置爲粗體或斜體,但是發現它是否輕便似乎不起作用。
對於淺色字體,「特徵」的值爲0x0 - 因此沒有設置標誌。是否有另一種檢測光字體的方法?
代碼如下所示:
- (void) setFontFamily:(UIView*)view
{
if([view isKindOfClass:[UILabel class]])
{
UILabel* label = (UILabel*)view;
UIFontDescriptorSymbolicTraits traits = label.font.fontDescriptor.symbolicTraits;
BOOL bold = traits & UIFontDescriptorTraitBold;
BOOL italic = traits & UIFontDescriptorTraitItalic;
if(bold)
[label setFont:[UIFont fontWithName:@"OpenSans-Semibold"size:label.font.pointSize]];
else if(italic)
[label setFont:[UIFont fontWithName:@"OpenSans-Italic"size:label.font.pointSize]];
else if(light)
[label setFont:[UIFont fontWithName:@"OpenSans-Light"size:label.font.pointSize]];
else
[label setFont:[UIFont fontWithName:@"OpenSans"size:label.font.pointSize]];
}
for(UIView* subView in view.subviews)
[self setFontFamily:subView];
}
您是否有可能誤解「光」?斜體和粗體是_symbolic_特徵。 「光」是一個_weight_特徵。您的代碼中沒有任何內容與體重有關。 – matt
哦,對不起,還有一件事:在iOS 7上,你知道UIFontDescriptor嗎?您可能會發現使用起來更愉快。 – matt
我很可能誤解了光的技術定義。儘管不是大膽的重量特質?光在相反的方向上本質上是一回事。無論如何,我沒有看到與字體重量有關的任何API(例如沒有CTFontWeightTraits)。有這樣的事嗎? – d512