视网膜显示屏上的字体问题

3

我是Objective-C的新手,需要一些帮助。我的问题是,我有一个UITextField子类,我想使用以下代码设置占位符字体:

- (void)drawPlaceholderInRect:(CGRect)rect {
[[self placeholder] drawInRect:rect withAttributes:@{NSFontAttributeName: [UIFont fontWithName:@"Georgia Belle" size:25],NSForegroundColorAttributeName:RGBA(174, 150, 108, 1)}]; } 

我遇到了一个问题。当我在模拟器中选择iPad并编译程序时,一切都正常,但是当我选择视网膜设备时,就会出现下面的异常:

 [__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[0].

我想问的是:为什么它可以在非视网膜设备上运行,但在任何一种视网膜设备上都会抛出异常。

1
你的调试器告诉了你什么?你实际上得到了一个NSFont对象吗? - Flovdis
是的,我已经明白了,但这很显然,否则它就不能在非Retina设备上工作,正如我所说:在非Retina设备上它是可以工作的。 - Bogdan Somlea
你为什么要为此子类化 UITextField?只需使用 UITextFieldattributedPlaceholder 属性即可。 - rmaddy
当我分割它并且NSLog字体时,这就是我得到的:<UICTFont:0x10a10cff0>字体系列:".HelveticaNeueInterface-Regular";字重:正常;字形:正常;字号:17.00pt。 这毫无意义。 - Bogdan Somlea
希望我的回答能够帮助到你。 - Gabriel.Massana
显示剩余4条评论
2个回答

2
你的问题出在字体上。 HelveticaNeueInterface-Regular 是系统字体,就像这样:[UIFont systemFontOfSize:25] 另一方面,我无法使用RGBA(174, 150, 108, 1),我的代码出了问题。
你应该确保你的项目中导入了名为"Georgia Belle"的字体文件。
Georgia Belle.ttf 拖放到你的项目中。
打开 Info.plist 并添加一行:
打开你的 Target / Build Phases / Copy Bundle Resources。Xcode 有时会失败,并且不会添加新字体:
点击 +
完成
问题解决了。
你可以从 GitHub 上下载我的解决方案
最后,这是一个带有所有标准 iOS 字体的好网站:http://iosfonts.com

你不能使用RGBA(r,g,b,alpha),因为我正在使用它作为颜色的宏。 - Bogdan Somlea
1
它起作用了,我唯一没有做的事情是将字体添加到我的“复制包资源”中,但我无法弄清楚为什么它在非视网膜设备上能够工作。 - Bogdan Somlea
不错!我也不太明白Retina和非Retina之间的区别。我的代码在两者上都无法正常工作。 - Gabriel.Massana
我有一个基于这个问题的另一个问题: 我的一位同事告诉我,调用drawInRect方法不好,有没有其他方法可以改变占位符样式,而不需要调用这个方法?为什么不能调用它? - Bogdan Somlea

1
你需要将字体添加到副本资源中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接