2012-07-13 39 views
6

我制作了自定义键盘视图并将其链接到UITextField的inputView属性。 有没有办法改变方向更改时自定义inputView的高度,并使框架像系统键盘一样平滑地进行动画变化? 我的键盘尺寸为768x272,当设备横向变大时,尺寸变为1024x272,但我想使它变得更大,如1024x372。如果我在获取UIDeviceOrientationDidChangeNotification时使用下面的代码更改了框架,则更改动画不平滑。设备旋转时更改自定义输入视图的高度

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

你尝试把它放在动画块下? – Zaraki 2012-07-13 12:31:27

+0

我试图把它作为一个动画块 willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation时间:(NSTimeInterval)持续时间 但结果是一样的,高度从小到高的瞬间变化,那么动画开始,使其短宽。 – user1477781 2012-07-13 13:17:09

回答

2

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

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

当设备旋转时,系统简单地隐藏键盘,然后执行从键盘旧取向到新的方向的旋转动画。我认为动画块插入在两个通知UIKeyboardDidHideNotificationUIKeyboardWillShowNotification之间的某处。这些通知加上UIKeyboardWillChangeFrameNotification。此通知中的“框架”实际上是指框架UIPeripheralHostView

因此,当我得到UIKeyboardDidHideNotification时,更改输入视图的框架使系统有机会在动画开始之前调整UIPeripheralHostView的框架,从而导致在方向更改期间从短键盘平稳过渡到高键盘。

这适用于iOS 5,但苹果可能会改变未来的做法。

+0

在iOS 6中,当你有一个自定义的inputView时,你将不会收到UIKeyboardWillShowNotification等通知 – theraven 2013-02-03 22:55:36

6

Apple documentation for UIResponder.inputView: “如果UIKit在其自动调整大小的掩码中遇到具有UIViewAutoresizingFlexibleHeight值的输入视图,它将更改高度以匹配键盘。

所以,如果你想定制的高度,你不应该指定UIVieAutoresizingFlexibleHeight面具。

相关问题