【发布时间】:2013-09-02 10:04:00
【问题描述】:
我想知道在 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" size:0.0]。该字体实际上不存在,因此返回的 UIFont 为 nil。
使用 dictionaryWithObjectsAndKeys 的旧方法可以很好地处理 nil 字体,但新的 @{} 语法会使应用程序崩溃。
我可以通过使用正确的字体名称来解决这个问题,@"Helvetica-Bold"(需要一个连字符),但我担心选择字体并使用此语法(如果有)设备可能没有可用的选定字体并崩溃。
由于使用 dictionaryWithObjectsAndKeys 的旧方法可以正常工作,并且显然可以处理 nil 字体,因此我倾向于只使用它并在晚上轻松入睡。
我当然可以输入逻辑来检查 nil 字体并采取措施来处理它,但似乎是在浪费时间,因为旧方法可以处理这种情况。
总是使用旧语法会更好吗,因为不知道未来设备上可能会使用哪些字体?
Apple 在这个问题上有些失望。
有什么想法、意见或建议吗?
【问题讨论】:
-
这两个网站看起来都很棒,我保留了它们的链接以供将来参考,但我认为它们不会帮助我解决这个问题。请参阅下面我对 Hetal Vora 的回答的回复,了解原因。
标签: ios objective-c fonts nsdictionary