【问题标题】:Take CGRect out of UITextView从 UITextView 中取出 CGRect
【发布时间】:2013-08-01 20:50:31
【问题描述】:

这听起来一定真的很奇怪,但我想将键盘的 CGRect 取出 UITextView。这是一张可以帮助您的图片:

我基本上希望 UITextView 变小,所以当我添加文本时它会向下滚动。如果您需要更多信息,请咨询我。

编辑:当我使用此代码时:

- (void)keyboardWasShown:(NSNotification*)notification {
      NSDictionary* info = [notification userInfo];
      kbSIZE = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue];
      CGRect newTextViewFrame = self.notesTextView.frame;
      newTextViewFrame.size.height -= kbSIZE.size.height;
      self.notesTextView.frame = newTextViewFrame;
 }

发生这种情况:

【问题讨论】:

  • 不仅不奇怪,而且是首选行为。当应用程序不这样做并且您必须关闭键盘才能看到视图的最后一点时,这让我很恼火。 (通常是表格视图)

标签: ios uitextview cgrect


【解决方案1】:

一点也不奇怪。当您调出键盘时,表格视图经常会发生同样的事情。这段代码应该会有所帮助。

CGRect newTextViewFrame = textView.frame;
newTextFrame.size.height -= keyboardSize.frame.size.height;
textView.frame = newScrollFrame;

【讨论】:

  • Sorrysorry,我说的是scrollView,意思是textView。我已经编辑了答案以反映这一点。
  • 加回您坐在键盘上的视图高度,这应该可以解决问题。
  • 调用 textView.inputAccessoryView.frame.size.height 并重新添加该值。
【解决方案2】:

这一点都不奇怪:)

您可以通过注册为UIKeyboardWillShowNotification 的观察者来做到这一点(最好在同一进程中也注册UIKeyboardWillHideNotification)。

当注册的选择器被调用时,通知参数将在userInfo字典的UIKeyboardFrameEndUserInfoKey值内包含键盘的大小:

[[[通知用户信息] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size

您现在需要做的就是将 UITextView 的框架设置为您想要的大小。

请注意:您获得的 CGRect 不考虑设备方向。这意味着,如果设备实际上处于横向模式,您需要切换 CGRect 的宽度和高度,以使其在您的上下文中有意义。

【讨论】:

  • 在显示键盘之前,您的 UITextField 是否一直到视图底部?如果您使用 UIKeyboardFrameEndUserInfoKey 而不是 UIKeyboardFrameBeginUserInfoKey 怎么办?另外,您可以按Command+S自动对模拟器进行漂亮的截图。
  • 是的,它走到了底部,它是一个 UITextView。
  • 那么你需要找出为什么这些值没有加起来。此外,我看到您在键盘上添加了一个自定义 inputAccessoryView。由于它只显示“完成”按钮,我建议将其删除。 “返回”按钮应该在键盘上完成这项工作,或者如果你想在外面点击关闭键盘,一个简单的 UIGestureRecognizer 就可以了。
  • 感谢您的帮助。 Adam G. 帮我解决了这个问题。
猜你喜欢
  • 2014-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多