我们暂时尝试支持iOS 9。。。这是唯一正在发生的事情。。。
我有一个UITextView
,它占据了整个视图,它占据了整个屏幕。我注册接收UIKeyboardWillShowNotification
和UIKeyboardWillHideNotification
。我得到的效果很好,并调整了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中都可以正常工作。也就是说,当我键入内容时,文本会向上滚动,因此文本的底行永远不会落在键盘后面。只是iOS9。有人记得那些日子的已知问题吗,还有解决方法?
答案 0 :(得分:0)
我最好的猜测是您正在混合使用自动调整大小的自动版式,并且似乎是在以后的iOS中选择了预期,但在iOS 9中却没有。
在情节提要中使用您的代码+自动布局约束的快速示例导致我相信是您在较旧的iOS(以下所示的iOS 9.3模拟器)中看到的行为:
如果我使用纯自动布局方法滚动(即IBOutlet textView的底部约束,并在keyboardWillShow中以编程方式调整该常量),那么它将在iOS 9上产生正确的行为(不调用setFrame):
@property (strong, nullable) IBOutlet NSLayoutConstraint *textViewBottomConstraint;
...
- (void)keyboardWillShow:(NSNotification *)aNotification {
CGRect keyboardRect = [[[aNotification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
self.textViewBottomConstraint.constant = -keyboardRect.size.height;
}