设备旋转时更改自定义inputView的高度

时间:2012-07-13 06:16:12

标签: ios uitextfield uikeyboard inputview

我创建了一个自定义键盘视图并将其链接到UITextField的inputView属性。 当方向发生变化时,有没有办法改变自定义inputView的高度,并且像系统键盘一样平滑动画框架变得平滑? 我的键盘尺寸是768x272,当设备走向横向时,尺寸变为1024x272,但我想让它变得像1024x372一样大。当我获得UIDeviceOrientationDidChangeNotification时,如果我使用下面的代码更改框架,则更改动画不流畅。

textField.inputView.frame = CGRectMake(0,0,1024,372);

2 个答案:

答案 0 :(得分:6)

UIResponder.inputView的每Apple documentation条: “如果UIKit在其自动调整遮罩中遇到带有UIViewAutoresizingFlexibleHeight值的输入视图,它会更改高度以匹配键盘。”

因此,如果您想要自定义高度,则不应指定UIVieAutoresizingFlexibleHeight蒙版。

答案 1 :(得分:2)

经过多次实验,我找到了自己问题的最佳答案。得到UIKeyboardDidHideNotification时,简短的答案是更改框架。

自定义inputView嵌入在由名为UIPeripheralHostView的系统控制的另一个视图中。 因此,在错误的时间更改自定义inputView不会立即反映或最多显示丑陋的布局。

当设备旋转时,系统会短暂隐藏键盘,然后执行键盘从旧方向到新方向的旋转动画。我认为动画块插入了两个通知UIKeyboardDidHideNotificationUIKeyboardWillShowNotification之间。这些通知与UIKeyboardWillChangeFrameNotification结合使用。此通知中的“框架”实际上是指UIPeripheralHostView

的框架

因此,当我得到UIKeyboardDidHideNotification时,更改输入视图的帧会让系统有机会在动画开始前调整UIPeripheralHostView的帧,从而在短键盘到高键盘的过程中平滑过渡方向改变。

这适用于iOS 5.但Apple可能会在未来改变这种做法。