我只针对iOS7进行开发。
当键盘显示时,我想要“调整大小”UITextView
,以便可以看到所有文本,而不是隐藏在键盘后面。
我考虑了几种不同的方法...
1)当键盘显示时更改UITextView
的框架。
下面的问题详细说明了我使用此方法遇到的相同问题 - 尽管框架被正确设置,但最后一行/光标将超出UITextView
的边界,因此不会在视线范围内:
UITextView cursor below frame when changing frame
您可以从以下屏幕截图中看到这种效果。 UITextView
具有绿色背景。它已添加到具有红色背景的UIView
中。箭头显示光标的位置...
2)更改UITextView
上的contentInset
属性
我认为这是推荐/首选的方法。请注意,我已阅读了Apple关于根据键盘出现/消失调整视图大小的文档:
使用我的代码时,当我更改UIEdgeInsets
的底部组件时,没有效果。
与上面相同的示例,绿色UITextView
在红色UIView
上,文本消失在键盘下面:
这是代码:
- (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
这个问题的答案建议在iOS 7上使用textContainerInset
而不是contentInset
:
UITextView contentInset not working in UITextView on iOS 7?
我也尝试过这个方法,但仍然无法调整UITextView
的大小。
在这个问题中,“mann”也遇到了contentInset
和textContainerInset
的问题:
UITextView content Inset Bottom not working iOS7
问题
- 哪种方法是正确/首选的,
textContainerInset
还是contentInset
? - 在上面设置
contentInset
的代码中,我是否漏掉了什么?还需要设置其他内容吗? - 这些是iOS 7的错误吗?
谢谢
UIKeyboardFrameEndUserInfoKey
而不是begin吗?Begin可能无法正确表示最终大小。 - gdavis