我想知道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 有点失望。
有什么想法、意见或建议吗?