【问题标题】:Font problems on retina display视网膜显示器上的字体问题
【发布时间】:2014-08-23 08:44:23
【问题描述】:

我是 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].

我要问的是:为什么它在非视网膜上有效,但在视网膜上抛出异常,任何类型的视网膜设备。

【问题讨论】:

  • 我会将您的方法分成单个块。首先在变量中获取字体,颜色,然后调用方法。现在您可以逐步调试代码,看看为什么您可能没有得到字体对象。
  • 我试过了,但还是会发生
  • 你的调试器告诉你什么。你真的得到了 NSFont 对象吗?
  • 按照@Flovdis 的建议,我会记录属性字典的每个值。
  • 是的,我有,但这很明显,因为否则它将无法在非视网膜设备上工作,正如我所说:在非视网膜设备上它正在工作。

标签: ios uitextfield uicolor uifont drawinrect


【解决方案1】:

您必须将字体添加到复制包资源中

【讨论】:

    【解决方案2】:

    您的问题在于您的字体。

    HelveticaNeueInterface-Regular 是系统字体。点赞:[UIFont systemFontOfSize:25]

    另一方面,我不能使用 RGBA(174, 150, 108, 1) 我的代码有问题。

    您应该确保您的项目中正确导入了名为 "Georgia Belle" 的字体。

    Georgia Belle.ttf 拖放到您的项目中

    打开 Info.plist 并添加一个新行:

    打开您的目标/构建阶段/复制捆绑资源
    Xcode 在这里失败,有时它没有添加我们的新字体:

    点击+

    完成

    问题解决了。

    你可以download my solution from GitHub

    最后一件事。这是一个拥有所有标准 ios 字体的好网站:http://iosfonts.com

    【讨论】:

    • 您不能使用 RGBA(r,g,b,alpha),因为它是我用于 RGBA 颜色的宏。
    • 它起作用了,唯一认为我没有做的是,在我的“复制捆绑资源”中添加字体,但我不知道为什么它在非视网膜设备上起作用
    • 不错!我也无法理解 Retina 和非 Retina 之间的区别。在我的代码中两者都不起作用。
    • 基于此我还有一个问题:我的一位同事告诉我,调用drawInRect方法是不行的,有没有其他方法可以改变占位符样式,而不调用这个方法,为什么不行?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多