输入一段时间后,UITextView在键盘后消失

问题描述 投票:0回答:1

我们试图支持iOS 9一段时间......这是唯一发生这种情况的地方......

我有一个UITextView占据了整个视图,占据了整个屏幕。我注册接收UIKeyboardWillShowNotificationUIKeyboardWillHideNotification。我得到那些很好,并调整我的UITextView的高度,使其在键盘上方:

- (void) keyboardWillShow:(NSNotification *)aNotification 
    {
    CGRect keyboardRect = [[[aNotification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
    CGRect bounds = self.view.bounds;
    bounds.size.height = bounds.size.height - keyboardRect.size.height;
    self.textView.frame = bounds;
    }

再次,这很好用。现在我键入几行。有一段时间,当我添加更多文本行时,文本的底线自动保持在键盘上方。但最终,通常只需几行(可能是4-5行),下一行将在键盘下方,我可以继续在键盘下键入行。最后我仍然可以在键盘上方看到的线条开始向上滚动,因为我用键盘后面的线条击中了屏幕的底部。

我在这个过程中没有得到UIKeyboardWillHideNotification,但它几乎表现得像我一样 - 也就是说,我的UITextView的大小似乎在键盘显示之前恢复到原来的大小。

所有这些在iOS 11中都可以正常工作。也就是说,当我输入时,文本会向上滚动,因此文本的底线永远不会出现在键盘后面。它只是iOS 9.任何人都记得当时的已知问题,还有一个解决方案吗?

ios objective-c uitextview ios9 uikeyboard
1个回答
0
投票

我最好的猜测是你将Autolayout与Autoresizing混合使用,它似乎是在后来的iOS中选择了预期的,而不是在iOS 9中。

在故事板中使用代码+自动布局约束的快速示例导致了我认为在旧版iOS中看到的行为(iOS 9.3模拟器如下所示):

AutoResizing+AutoLayout_iOS9

如果我使用纯自动布局方法滚动(即IBOutlet是textView的底部约束并在keyboardWillShow中以编程方式调整常量),那么它会在iOS 9上产生正确的行为(没有setFrame调用):

Pure_AutoLayout_iOS9

@property (strong, nullable) IBOutlet NSLayoutConstraint *textViewBottomConstraint;

...

- (void)keyboardWillShow:(NSNotification *)aNotification {
    CGRect keyboardRect = [[[aNotification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
    self.textViewBottomConstraint.constant = -keyboardRect.size.height;
}
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.