意味がないので、誰かに説明してもらう必要があります。
ビューがキーボードの上に積み重ねられているように見えるように計算userInfo
を使用して実行することでUIKeyboardsフレームを取得する場合、20ピクセルの違いを作成する必要があります。UIKeyboardFrameEndUserInfoKey
数学:
CGRect frame = view.frame;
CGPoint origin = frame.origin;
origin.x = kbFrame.origin.x;
origin.y = kbFrame.origin.y - view.frame.size.height - 20;
frame.origin = origin;
view.frame = frame;
ステータスバーに違いないと思いましたが、これがキッカーです。Retinaディスプレイで開発しているので、ステータスバーの高さは20ではなく40ピクセルです。
次に、ビューからビューへの変換を追加しました
CGRect kbFrame = [[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
UIWindow * window = [UIApplication sharedApplication].windows[0];
kbFrame = [self.view convertRect:kbFrame fromView:window];
そしてそれはそれを修正したようです。つまり、20ピクセルの違いを取り除くことができます。
本当に私を驚かせるのは、を使用しているときですUIKeyboardFrameBeginUserInfoKey
。キーボードのフレームは画面の下部にあります。これは正しいですが、終了フレームにより、20ピクセルの違いがエンコードされます。変換コードを追加すると、キーボードが20ピクセル上に表示されるため、違いがなくなります。一体何が起こっているのですか?