我有以下代码可以创建多种字体。
UIFont* systemFont1 = [UIFont systemFontOfSize:12.0];
UIFont* systemFont2 = [UIFont boldSystemFontOfSize:12.0];
UIFont* systemFont3 = [UIFont italicSystemFontOfSize:12.0];
UIFont* customFont1 = [UIFont fontWithName:@"HelveticaNeue-Light" size:12.0];
UIFont* customFont2 = [UIFont fontWithName:@"HelveticaNeue-Regular" size:12.0];
UIFont* customFont3 = [UIFont fontWithName:@"HelveticaNeue-Thin" size:12.0];
UIFont* customFont4 = [UIFont fontWithName:@"MyriadPro" size:12.0];
UIFont* customFont5 = [UIFont fontWithName:@"MyriadPro-Italic" size:12.0];
UIFont* customFont6 = [UIFont fontWithName:@"MyriadPro-Condensed" size:12.0];
我想知道哪个UIFont
是系统。我几乎需要一个为变量返回BOOL
YES
的方法:system NO
,customFont4
,customFont5
,customFont6
,NO
}。
由于 Helvetica Neue 是iOS7上的系统字体,因此在这些情况下是否应该返回YES
或{{1}},这是一个争论的主题,但对于我的问题,无论哪种方式都没问题。
所以我的问题是:
如何验证UIFont实例是否是由任何一种系统字体方法创建的?
感谢您的帮助!
答案 0 :(得分:6)
这是您想要的方法:
-(BOOL)isSystemFont:(UIFont *)font
{
return ([[font familyName] isEqualToString:[[UIFont systemFontOfSize:12.0f] familyName]])?YES:NO;
}
或作为Swift3的扩展
extension UIFont {
func isSystemFont() -> Bool {
return self.familyName == UIFont.systemFont(ofSize: 12.0).familyName
}
}
以上方法将根据需要返回
if([self isSystemFont:systemFont1]) NSLog(@"SystemFont");
else NSLog(@"Custom Font");
if([self isSystemFont:customFont1]) NSLog(@"SystemFont");
else NSLog(@"Custom Font");
输出
2014-03-04 15:48:18.791 TestProject[4031:70b] SystemFont
2014-03-04 15:48:18.791 TestProject[4031:70b] Custom Font
答案 1 :(得分:0)
只需检查fontName和/或familyName?
NSLog(@"Fontname: %@", systemFont1.fontName);
NSLog(@"Familyname: %@", systemFont1.familyName);
答案 2 :(得分:0)
我已经创建了方法,并在 iOS 6 和 iOS7 中进行了测试。它工作正常。我得到了你期望的结果。
这是代码:
- (BOOL)isSystemFont:(UIFont*)pFont {
NSLog(@"pFont-%@",pFont.familyName);
// Object created for comparing system font with custom font
UIFont *font = [UIFont systemFontOfSize:10];
NSLog(@"Font-%@",font.familyName);
if ([pFont.familyName isEqualToString:font.familyName]) {
return YES;
} else {
return NO;
}
}
希望,这对你有帮助。
答案 3 :(得分:0)
字体不仅仅包含名称和大小。这是一个更彻底的检查。警告:仅适用于iOS 7。
BOOL FontIsEqualToFont(UIFont *font1, UIFont *font2)
{
return [[[font1 fontDescriptor] fontAttributes] isEqual:[[font2 fontDescriptor] fontAttributes]];
}
// use as follows:
BOOL isSystemFont = FontIsEqualToFont(systemFont1, customFont1);
唯一识别字体的另一个好方法是使用他们的postscript名称:
BOOL fontsAreEqual = [[[font1 fontDescriptor] postScriptName] isEqualToString:[[font2 fontDescriptor] postScriptName]];