6

カスタム キーボード ビューを作成し、それを UITextField の inputView プロパティにリンクしました。向きが変わったときにカスタムinputViewの高さを変更し、システムキーボードのようにフレームの変更をスムーズにアニメーション化する方法はありますか? 私のキーボードのサイズは 768x272 で、デバイスが横向きになるとサイズは 1024x272 になりますが、1024x372 のように大きくしたいと考えています。UIDeviceOrientationDidChangeNotification を取得した際に以下のコードでフレームを変更すると、変更アニメーションがスムーズにいきません。

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

2 に答える 2

6

UIResponder.inputViewに関する Apple のドキュメントによると、「UIKit は、自動サイズ変更マスクに UIViewAutoresizingFlexibleHeight 値を持つ入力ビューに遭遇した場合、キーボードに合わせて高さを変更します。」

したがって、カスタマイズされた高さが必要な場合は、UIVieAutoresizingFlexibleHeight マスクを指定しないでください。

于 2014-08-12T19:41:52.743 に答える
2

多くの実験の後、私は自分の質問に対する最良の答えを見つけました。簡単な答えは、 を取得したときにフレームを変更することですUIKeyboardDidHideNotification

カスタム inputView は、 というシステムによって制御される別のビューに埋め込まれていますUIPeripheralHostView。そのため、間違ったタイミングでカスタム inputView を変更しても、すぐには反映されないか、せいぜい醜いレイアウトが表示されます。

デバイスが回転すると、システムはキーボードを一時的に非表示にしてから、古い向きから新しい向きへのキーボードの回転アニメーションを実行します。UIKeyboardDidHideNotificationアニメーション ブロックは、2 つの通知との間のどこかに挿入されていると思いますUIKeyboardWillShowNotification。これらの通知はUIKeyboardWillChangeFrameNotification. この通知の「フレーム」は、実際には のフレームを意味しUIPeripheralHostViewます。

そのため、取得時に入力ビューのフレームを変更すると、アニメーションが開始する前UIKeyboardDidHideNotificationにシステムがフレームを調整する機会が与えUIPeripheralHostViewられ、向きの変更中に短いキーボードから高いキーボードにスムーズに移行します。

これは iOS 5 で機能します。ただし、Apple は将来的にこの方法を変更する可能性があります。

于 2012-07-16T04:53:02.053 に答える