質問
アラートビューを少し高く移動して、キーボードを画面に合わせることができるようにしました。これを行うには、アラートのフレームを取得し、アラートを表示した後にYを変更して、フレーム変数が合法になるようにします。これはシミュレータでは正常に機能しますが、ハードウェアでこれを行うと、アラートは正しい位置から開始されますが、すぐに元の垂直中央位置にジャンプします。 UIAlertViewの位置は、ユーザビリティガイドラインごとに変更されるはずのない固定されたものですか、それとも何か間違ったことをしていますか?
ありがとう!
解決
これを試しているOSは何ですか? OS 3.0シミュレータとOS 3.0デバイスの両方で動作するようになりました:
UIAlertView * alert = [ [ UIAlertView alloc ] initWithTitle:@"Alert" message:@"Alert"
delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil ];
alert.transform = CGAffineTransformTranslate( alert.transform, 0.0, 100.0 );
[ alert show ];
CGAffineTransformTranslate
は、既存の変換、x変換、およびy変換の3つの引数を取ります。私が使用した例では、アラートビューは通常よりも100ピクセル高いように見えました。これを試して、何が起こるかを見てください。
また、init
のアラートのフレームをデフォルトで画面全体の中心に設定する可能性が高いため、アラートを表示する前にフレームを変更できることは確かです。
他のヒント
iOS4がUIAlertViewsを動き回るのは難しいので。 UIAlertViewにUITextFieldサブビューを追加すると、iOS4ではキーボードがオーバーラップしないようにアラートが上に移動することに気付きました。これは起こりません<!> lt; iOS4。
また、showが呼び出された後でもアラートのフレームが初期化されていないことに気づいたので、相対的なCGAffineTransformationを行う簡単なプログラム的な方法はありません。唯一の解決策は、OSバージョンに基づいて条件付き変換を実行することです。
これは、いつでも変更される可能性のある、UIAlertViewsの文書化されていない動作をスレッド化するように見えます。 Appleは、テキストやボタン以外にはアラートを使用するつもりはないと思っています(独自のアプリケーションがこの規則に違反している場合でも)。
私は、この種のシナリオに対して独自のカスタムアラートの作成を開始します。
モーダルを意図したアラートではありません-つまり、通常はそうしませんアラートがアクティブな間に他のユーザー入力を実行しますか?この場合、なぜキーボードの可視性が必要なのですか?