iOS 7中,当键盘弹出时调整UITextView大小的问题

8

我只针对iOS7进行开发。

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

我考虑了几种不同的方法...

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

下面的问题详细说明了我使用此方法遇到的相同问题 - 尽管框架被正确设置,但最后一行/光标将超出UITextView的边界,因此不会在视线范围内:

UITextView cursor below frame when changing frame

您可以从以下屏幕截图中看到这种效果。 UITextView具有绿色背景。它已添加到具有红色背景的UIView中。箭头显示光标的位置...

enter image description here

2)更改UITextView上的contentInset属性

我认为这是推荐/首选的方法。请注意,我已阅读了Apple关于根据键盘出现/消失调整视图大小的文档:

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

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

与上面相同的示例,绿色UITextView在红色UIView上,文本消失在键盘下面:

enter image description here

这是代码:

- (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”也遇到了contentInsettextContainerInset的问题:

UITextView content Inset Bottom not working iOS7

问题

  • 哪种方法是正确/首选的,textContainerInset还是contentInset
  • 在上面设置contentInset的代码中,我是否漏掉了什么?还需要设置其他内容吗?
  • 这些是iOS 7的错误吗?

谢谢


你尝试过使用UIKeyboardFrameEndUserInfoKey而不是begin吗?Begin可能无法正确表示最终大小。 - gdavis
谢谢您的建议,但问题不在键盘大小上。检查后我发现它是正确的。我从其他人那里读到UITextView在iOS 7上有漏洞...从我的使用情况来看,似乎一个错误是方法(1)的原因。至于方法(2)和(3),我不确定我是否正确理解/使用API。7.1仍处于测试阶段;不确定我们能否谈论这个(尚未)。 - Gavin Hope
那么,调整UITextView的框架而不是其插图怎么样?您可以将键盘的框架转换为UITextView的超级视图,并执行交集以查看应该调整视图的大小。我以前在几个项目中成功地完成了这项工作。 - gdavis
是的,我打算调整框架大小而不是插图。我希望7.1版本能够改善光标的情况。我已经阅读了其他解决方法,涉及更改光标的颜色,所以我会尝试一下。谢谢。 - Gavin Hope
1个回答

5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接