【问题标题】:UIKeyboardFrameEndUserInfoKey return wrong origin - iOS7UIKeyboardFrameEndUserInfoKey 返回错误的来源 - iOS7
【发布时间】:2013-11-26 02:15:49
【问题描述】:

当文本字段被键盘隐藏时,我在尝试从视图控制器中移动根视图(带有滚动视图)时遇到了一些问题。此文本字段不在根目录中。

我的应用在 iOS7 中运行并且只有纵向模式,如果位置是底部主页按钮,我会从 UIKeyboardFrameEndUserInfoKey 获得正确的值:

(CGRect) $2 = origin=(x=0, y=760) size=(width=768, height=264)

但如果位置是顶部主页按钮 y 从 UIKeyboardFrameEndUserInfoKey 得到错误的来源:

(CGRect) $3 = origin=(x=0, y=0) size=(width=768, height=264)

你有什么想法吗?

谢谢!

【问题讨论】:

  • 应用程序是否已配置为处理该方向?
  • 是的,我在支持的界面方向 (iPad) 中配置了纵向(顶部主页按钮)和纵向(底部主页按钮)

标签: ios keyboard ios7 textfield


【解决方案1】:

我也遇到了这个问题。虽然我觉得我以前从未处理过这个问题,但我不能肯定地说,因为我没有太多处理这些东西的经验。虽然,在 iPhone 上一切正常,所以我不确定这里发生了什么。

总之,苹果文档是这样的:

包含 CGRect 的 NSValue 对象的键,用于标识屏幕坐标中键盘的结束帧。这些坐标不考虑由于界面方向更改而应用于窗口内容的任何旋转因素。因此,在使用它之前,您可能需要将矩形转换为窗口坐标(使用 convertRect:fromWindow: 方法)或视图坐标(使用 convertRect:fromView: 方法)。

所以,我只是做了:

keyboardRect = [self.view convertRect:keyboardRect fromView:nil];

这会将矩形转换为窗口的坐标系。

【讨论】:

  • 您好 user3062913 对于您的回答,我认为 y 值是正确的,但 x 值是错误的:origin=(x=-161, y=416) size=(width=1024, height=352 )。
  • 这太棒了-我正在检查方向并手动执行此操作,这在模拟器和设备之间产生了不一致的结果
【解决方案2】:

这是一个记录在案的功能:

注意:UIKeyboardFrameBeginUserInfoKey 中包含的矩形 和 userInfo 的 UIKeyboardFrameEndUserInfoKey 属性 字典应该只用于它包含的大小信息。 不要使用矩形的原点(始终为 {0.0, 0.0}) 矩形相交操作。因为键盘是动画的 到位后,键盘的实际边框会发生变化 随着时间的推移。

https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html

【讨论】:

  • 现在这似乎是过时的文档。我在运行 iOS 13.1 的 iPhone Xs Max 模拟器上看到纵向的原始值是 {0,550} 和 {0,838},横向是 {0,205} 和 {0,360}。
  • 2014 年写的评论有点正常 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-07
  • 2012-07-17
  • 2016-02-18
  • 2011-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多