我想知道 iOS 保证在 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];
然后我认为使用 dictionary 的新语法可能更好更方便,所以我尝试了这个:
[[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" size:0.0] . 该字体实际上不存在,因此返回的 UIFont 是 nil .
使用 dictionaryWithObjectsAndKeys 的旧方法处理 nil 字体很好,但新的 @{} 语法使应用程序崩溃 .
我能够通过使用正确的字体名称 @"Helvetica-Bold" (需要一个连字符)来解决这个问题,但我担心如果有可能设备没有可用的选定字体并且崩溃,请选择字体并使用此语法 .
由于使用 dictionaryWithObjectsAndKeys 的旧方法工作正常,并且显然可以处理 nil 字体,我倾向于使用它并在晚上轻松入睡 .
我当然可以用逻辑来检查 nil 字体并采取措施来解决这个问题,但是由于旧的方法处理了这种情况,所以似乎是不必要的浪费时间 .
是否总是使用旧语法会更好,因为无法确定未来设备上可用的字体是什么?
苹果对这个问题有些失望 .
有什么想法,意见或建议吗?
1 回答
您可以使用
然后对于数组中的每个
familyName
,您可以看到可用的fontNames:这将为您提供设备上可用的字体名称列表 .