【发布时间】:2015-12-12 06:17:45
【问题描述】:
我在 iOS 9、XCode 7 GM 上运行。我有一个扩展 UITextField (CustomOffsetTextField) 并为自定义文本定位提供支持的类,如下所示:
override func textRectForBounds(bounds: CGRect) -> CGRect {
return CGRectOffset(bounds, textOffset.x + leftViewOffset, textOffset.y)
}
override func placeholderRectForBounds(bounds: CGRect) -> CGRect {
return CGRectOffset(bounds, textOffset.x + leftViewOffset, textOffset.y)
}
override func editingRectForBounds(bounds: CGRect) -> CGRect {
return CGRectOffset(bounds, textOffset.x + leftViewOffset, textOffset.y)
}
leftViewOffset 是文本字段的 leftView 的宽度,如果存在的话。 textOffset 是一个 CGPoint,它定义了自定义的 x 和 y 偏移以应用于文本矩形。
我的问题出现在我的登录视图中。我有 2 个 CustomOffsetTextField 实例 - 一个用于用户的电子邮件,一个用于他们的密码。
在第一次加载视图控制器时,如果我在一个字段中输入文本,然后点击另一个字段,则该文本将在其文本字段中短暂跳回位置 0,0,然后再跳回定义的位置通过 textRectForBounds。一些基本的打印调试验证这些函数总是返回我期望的值。
在这个最初的打嗝之后,文本字段的行为就像我期望的那样。此问题仅在视图控制器加载后的每个文本字段中发生一次。之后,我可以随意在字段之间来回点击,而不会再次发生。
有没有人在 iOS 9 中看到与 UITextField 类似的问题?如果是这样,你能找到解决办法吗?
【问题讨论】:
-
我遇到了类似的问题,除了当我点击“第二个”UITextField 时,我的“第一个”UITextField 的文本被暂时清除(这只是短暂发生,很快被正确的用户提供的文本)。在实施@Jesse 提出的解决方案后,这不再是问题。我仍然遇到与 secureTextEntry 设置为 YES 的 UITextField 相关的问题 - 也就是说,当它成为第一响应者时,editingRectForBounds 比它应该的低几个点(它在 UITextField 的范围内没有垂直对齐)。
-
您使用的是自定义字体吗?已知某些自定义字体会导致与 secureTextEntry 相关的问题。我们不得不在我们自己的应用程序中跳过一些障碍来解决这个问题。如果您允许用户显示/隐藏该字段中的文本,请尝试在将 secureTextEntry 设置为 YES 之前立即应用系统字体,然后在将其设置回 NO 后立即重新应用您的自定义字体。这对我们有用。
标签: cocoa-touch uitextfield ios9