【发布时间】:2012-04-02 12:52:15
【问题描述】:
我有一个视图控制器同时监听 UIKeyboardWillShowNotification 和 UIKeyboardWillHideNotification。这些通知的处理程序会调整视图的各个部分,这是标准过程。
以下代码用于从屏幕坐标转换键盘矩形:
CGRect keyboardBounds = [self.view convertRect:[keyboardBoundsValue CGRectValue] fromView:nil];
再次,标准程序。不幸的是,存在这种转换失败的危急情况。看看在部署键盘时 iPhone 从纵向旋转到横向会发生什么:
1) iOS 自动触发UIKeyboardWillHideNotification; self.interfaceOrientation 被报告为portrait; keyboardBounds.height 为 216.0。 这是有道理的。为什么?因为通知处理程序有机会在视图切换到横向模式之前“清理”。
2) iOS 自动触发UIKeyboardWillShowNotification; self.interfaceOrientation 被报告为portrait; keyboardBounds.height 为 480.0。 这没有意义。为什么不?因为通知处理程序会认为键盘的高度是 480.0!
Apple 是否在这个问题上丢了球,还是我做错了什么?
请注意,改为监听 UIKeyboardDidShowNotification 不是一个有效的解决方案,因为它会显着降低用户体验。为什么?因为在键盘部署动画发生后对视图的更改进行动画处理……嗯,看起来很糟糕。
在部署键盘时,有没有人设法让自动旋转完美地工作?这似乎是苹果完全忽视的混乱爆炸。 >:|
【问题讨论】:
-
你用哪个 iOS 版本试试这个?
标签: iphone ios ipad keyboard autorotate