gpt4 book ai didi

cocoa-touch - iOS 9 UITextField textRectForBounds 问题

转载 作者:行者123 更新时间:2023-12-04 01:59:38 28 4
gpt4 key购买 nike

我在 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 偏移量以应用于文本矩形。

我的问题出现在我的登录 View 中。我有 2 个 CustomOffsetTextField 实例 - 一个用于用户的电子邮件,一个用于用户的密码。

在第一次加载 View Controller 时,如果我在一个字段中输入文本然后点击另一个字段,该文本将跳回到其文本字段中的位置 0,0,然后再跳回到定义的位置通过 textRectForBounds。一些基本的打印调试验证这些函数总是返回我期望它们返回的值。

在最初的小插曲之后,文本字段的行为与我预期的一样。此问题仅在 View Controller 加载后在每个文本字段中出现一次。之后,我可以根据需要在字段之间来回点击,而不会再次发生这种情况。

有人在 iOS 9 中看到过 UITextField 的类似问题吗?如果是这样,您能找到解决办法吗?

最佳答案

在 iOS 9 中,每当您在文本字段之间点击时,都会发送一个额外的 UIKeyboardWillShowNotification 通知。如果您在通知回调中调用了 [self.view layoutIfNeeded],它将导致跳转。

// Animate
[UIView beginAnimations:@"keyboardDidShowAnimations" context:NULL];
[UIView setAnimationDuration:duration];
[UIView setAnimationCurve:curve];
[self.view layoutIfNeeded];
[UIView commitAnimations];

与此有关: https://forums.developer.apple.com/message/53905#53905

如果您在没有软件键盘的情况下在模拟器中进行测试,您将获得一个额外的 UIKeyboardWillHideNotification 而不是如果您在该通知回调中也有 layoutIfNeeded 调用,这可能会导致相同的问题.

我通过在回调的顶部放置检查来解决这个问题,以确保我确实需要动画/更新约束。

- (void)keyboardWillShow:(NSNotification *)note {
BOOL shouldAnimate = self.someConstraint.constant != kMinimumSize;
if (shouldAnimate) {
...

- (void)keyboardWillHide:(NSNotification *)note {
BOOL shouldAnimate = self.someConstraint.constant == kMinimumSize;
if (shouldAnimate) {
...

更新:这不一定适用于多次调用通知方法的第 3 方键盘。参见 https://stackoverflow.com/a/26004605 .

关于cocoa-touch - iOS 9 UITextField textRectForBounds 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32595423/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com