我想知道哪些字体可以在 iOS 设备上使用。
我用过它并且工作正常:
[[UITabBarItem appearance] setTitleTextAttributes:
[NSDictionary dictionaryWithObjectsAndKeys:
[UIColor grayColor], UITextAttributeTextColor,
[UIColor lightGrayColor], UITextAttributeTextShadowColor,
[NSValue valueWithUIOffset:UIOffsetMake(1, 1)], UITextAttributeTextShadowOffset,
[UIFont fontWithName:@"Helvetica Bold" size:0.0], UITextAttributeFont,
nil]
forState:UIControlStateNormal];
然后我认为使用词典的新语法可能会更好更方便,所以我尝试了这个:
[[UITabBarItem appearance] setTitleTextAttributes:@{
UITextAttributeFont : [UIFont fontWithName:@"Helvetica-Bold" size:0.0f],
UITextAttributeTextColor : [UIColor grayColor],
UITextAttributeTextShadowColor : [UIColor lightGrayColor],
UITextAttributeTextShadowOffset : [NSValue valueWithUIOffset:UIOffsetMake(1.0f, 1.0f)],
} forState:UIControlStateNormal];
它确实有效,但我关注的是一些问题。
最初,我尝试过这种字体, [UIFont fontWithName:@“Helvetica Bold”尺寸:0.0] 。该字体实际上不存在,因此返回的 UIFont 为 nil 。
使用 dictionaryWithObjectsAndKeys 的旧方法处理 nil 字体就好了,但新的 @ {} 语法使应用程序崩溃。
我能够通过使用正确的字体名称来解决这个问题, @“Helvetica-Bold”(需要连字符),但我担心选择字体并使用此语法(如果有)设备可能无法使用所选字体并崩溃。
由于使用 dictionaryWithObjectsAndKeys 的旧方法工作正常,并且显然可以处理 nil 字体,因此我倾向于使用它并在晚上轻松入睡。
我当然可以用逻辑来检查 nil 字体并采取措施来解决这个问题,但是由于旧方法处理了这种情况,这似乎是一种不必要的浪费时间。
总是使用旧语法会更好吗,因为无法确定未来设备上可用的字体是什么?
对于这个问题,Apple有些失望。
有任何想法,意见或建议吗?
答案 0 :(得分:1)
您可以使用
NSArray *familyNames = [UIFont familyNames];
然后对于数组中的每个familyName
,您可以看到可用的fontNames:
NSArray *fontNames = [UIFont fontNamesForFamilyName:familyName];
这将为您提供设备上可用的字体名称列表。