显示键盘时调整UITextView的问题,在iOS 7中

我只针对iOS7。

我想在显示键盘时调整UITextView的大小,以便能看到所有的文本,而不是隐藏在键盘后面。

我已经考虑了一些不同的方法来…

1)当键盘显示时,改变UITextView的框架。

下面的问题详细说明了与这种方法相同的问题 – 尽pipe正确设置了框架,但最后一行/光标将超出UITextView的界限,因此不可见:

UITextView光标在帧更改帧之后

你可以从下面的屏幕截图中看到这个效果。 UITextView有一个绿色的背景。 它已被添加到一个红色背景的UIView 。 箭头显示光标所在的位置

在这里输入图像说明

2)更改UITextView上的contentInset属性

我相信这个build议/首选的方法。 请注意,我已经阅读了苹果文档,以基于键盘出现/消失来调整视图大小:

https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html#//apple_ref/doc/uid/TP40009542-CH5-SW7

用我的代码,当我更改UIEdgeInsets的底部组件时,我没有任何效果。

和上面的例子一样,在UIView的红色UITextView上,文本在键盘下消失:

在这里输入图像说明

这里是代码:

 - (void)keyboardWillShow:(NSNotification*)notification { CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; UIEdgeInsets insets = _textView.contentInset; insets.bottom += keyboardSize.height; _textView.contentInset = insets; _textView.scrollIndicatorInsets = insets; } 

注意scrollIndicatorInsets部分工作正常 。 屏幕截图很难描述,但是滚动指示器在正确的位置开始和停止,看起来是正确的大小。

我已经阅读了一些人们遇到类似问题的问题。

3)更改UITextView上的textContainerInset

这个问题的答案build议在iOS 7上使用textContainerInset而不是contentInset

UITextView contentInset无法在iOS 7上的UITextView中工作?

我也试过这个,但仍然没有设法调整UITextView大小。

在这个问题中,'mann'在contentInsettextContainerInset也有问题:

UITextView内容底部不工作的iOS7

问题

  • 这是正确/首选的方法, textContainerInsetcontentInset
  • 在上面显示的代码中设置contentInset ,我错过了什么? 还有什么我需要设置?
  • 这些与iOS 7的错误?

谢谢

这是iOS 7中的一个bug。Pete Stenberger用UITextView的子类解决了这个问题。 你可以在这里find它:

https://github.com/steipete/PSPDFTextView

以下是更多信息:

http://petersteinberger.com/blog/2014/fixing-uitextview-on-ios-7/