编辑后 UITextField 上的 Xcode 5 字体大小错误

Posted

技术标签:

【中文标题】编辑后 UITextField 上的 Xcode 5 字体大小错误【英文标题】:Xcode 5 wrong font size on UITextField after editing 【发布时间】:2013-09-27 08:12:43 【问题描述】:

我有自定义字体和大小的 UITextFields。一切正常,直到我更改为 Xcode 5 以使用新的 ios/Xcode 修复所有更改。现在,当我检查我的 UITextFields 时,它们在占位符和编辑时都有正确的字体,但是当我停止编辑时,字体大小会变大。那么为什么现在使用 Xcode 5 就不行了呢?

截图:link

设置字体的代码没有改变:

[_eventName setFont:[UIFont fontWithName:APP_FONT_FUTURASTD_LIGHT size:16]];

【问题讨论】:

【参考方案1】:

您是否对 UILabel 的外观代理进行了更改?我有一个类似的问题,它看起来好像 UITextField 的文本在编辑完成后呈现为 ​​UILabel。在 UILabel 上覆盖我的外观代理设置为我解决了这个问题。

【讨论】:

不知道我是怎么错过这个答案的,但我走了。该项目是由其他开发人员启动的,我没有得到任何文档,所以我不确定,但我认为代理没有被修改。我解决这个问题的方法是用自定义 UITextViews 替换所有 UITextFields,在其中我从 UITextFields 添加了必要的功能。【参考方案2】:

在表格中插入行时我也遇到了问题 - 表格单元格中的文本字段将使用 UILabel 代理字体,而不是其字体属性上设置的字体。滚出屏幕再重新打开会显示正确的字体。

我能够解决此问题的唯一方法是覆盖 UITextField,添加自定义 drawRect - 在这里我必须将 self.font 设置为 nil,然后将 self.font 重置为我想要的值。

克里斯

【讨论】:

我通过创建自己的扩展 UITextView 的类来解决这个问题,该类可以编辑。但这只是建设性的答案,所以我将其标记为正确。【参考方案3】:

现在你需要使用 sizeWithAttributes: 代替,它现在需要一个 NSDictionary。使用键 UITextAttributeFont 和您的字体对象传递对,如下所示:

[_eventName.text sizeWithAttributes:@NSFontAttributeName:[UIFont fontWithName:APP_FONT_FUTURASTD_LIGHT size:16]]

【讨论】:

那个“字符串”是什么?不知道如何使用它。这也仅适用于 iOS7 吗? 试过这样使用 [_eventName.text sizeWithAttributes:@NSFontAttributeName:[UIFont fontWithName:APP_FONT_FUTURASTD_LIGHT size:16]];但这不起作用,所以可能是错误的方式。【参考方案4】:

我遇到了这个问题,就像 chrisoneiota 所描述的那样,问题是 UITextField 在某些情况下使用 UILabel。我也通过覆盖 UITextField 解决了这个问题,但我没有实现 drawInRect:

- (void)addSubview:(UIView *)view 
    if ([view isKindOfClass:[UILabel class]]) 
        UILabel *label = (UILabel *)view;
        label.font = self.font;
    
    [super addSubview:view];

这似乎运作良好。

【讨论】:

以上是关于编辑后 UITextField 上的 Xcode 5 字体大小错误的主要内容,如果未能解决你的问题,请参考以下文章

xcode / iOS:UITextField覆盖到具有相同框架的UITableViewCell上不匹配

tvOS UITextField 编辑后空白

tvOS UITextField 编辑后空白

UITextfield 键盘辞职

初始化后如何为 UITextField 分配委托?

当我们点击它时 UItextfield 不可编辑