Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 输入一段时间后,UITextView消失在键盘后面_Ios_Objective C_Uitextview_Ios9_Uikeyboard - Fatal编程技术网

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

Ios 输入一段时间后,UITextView消失在键盘后面,ios,objective-c,uitextview,ios9,uikeyboard,Ios,Objective C,Uitextview,Ios9,Uikeyboard,我们正在尝试支持iOS 9一段时间。。。这是唯一发生这种事的地方 我有一个UITextView,它占据了整个视图,占据了整个屏幕。我注册接收UIKeyboardWillShowNotification和UIKeyboardWillHideNotification。我可以很好地获取这些信息,并调整UITextView的高度,使其位于键盘上方: - (void) keyboardWillShow:(NSNotification *)aNotification { CGRect ke

我们正在尝试支持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中都可以正常工作。也就是说,当我打字时,文本向上滚动,这样文本的底线就不会落在键盘后面。只是iOS 9。有人记得那个时候的一个已知问题,还有一个解决方法吗?

我最好的猜测是,你正在混合自动布局和自动调整大小,似乎在以后的iOS中选择了预期的问题,但在iOS 9中没有

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

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


观察力很好。我实际上根本不使用自动布局,但由于某种原因,这个特殊的nib选中了自动布局框。这是一个相当旧的文件——基于版本控制它在2011之前存在(应用程序中最早的代码是2008,而不是从1998计算C++)。我怀疑在某个XCode更新中,它重新格式化了文件,并在默认情况下打开了Autolayout。我关闭了它,它开始在iOS 9和iOS 11中正常运行。谢谢你的提示,很高兴能帮上忙。可能是在选中“自动布局”框的情况下,它将自动调整大小的遮罩转换为约束,然后这些约束与
keyboardWillShow
中以编程方式添加的约束相冲突。
@property (strong, nullable) IBOutlet NSLayoutConstraint *textViewBottomConstraint;

...

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