6

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

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

2 回答 2

6

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

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

于 2014-08-12T19:41:52.743 回答
2

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

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

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

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

这在 iOS 5 中有效。但 Apple 将来可能会改变这种做法。

于 2012-07-16T04:53:02.053 回答