TPKeyboardAvoiding、Apple の有名なソリューション、および UIScrollView の使用に関するさまざまな提案など、多くの同様のソリューションがあることを認識しています。私の場合、キーボードをスクロールまたは移動するのではなく、キーボードに合わせてビューのサイズを変更する必要があります。このソリューションは、私が達成しようとしていることに最も近いので、それが私の基礎でした。ただし、横向きモードで動作させるのに問題があります。キーボードが表示されたときにビューのサイズを変更する私の方法は次のとおりです。
- (void)keyboardWillShow:(NSNotification *)note {
NSDictionary *userInfo = note.userInfo;
NSTimeInterval duration = [[userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
UIViewAnimationCurve curve = [[userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey] intValue];
CGRect keyboardFrame = [[self textField].superview convertRect:[[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue] fromView:nil];
CGRect statusBarFrame = [[self textField].superview convertRect:[UIApplication sharedApplication].statusBarFrame fromView:nil];
CGRect bounds = [self textField].superview.bounds;
CGRect newFrame = CGRectMake(0.0, 0.0, bounds.size.width, keyboardFrame.origin.y + statusBarFrame.size.height);
[UIView animateWithDuration:duration delay:0 options:UIViewAnimationOptionBeginFromCurrentState | curve animations:^{
[self textField].superview.frame = newFrame;
} completion:nil];
}
これはポートレートモードで完全に機能します。
ただし、横向きモードでは、ビューは、下からではなく、デバイスが回転された方向に応じて、左から右または右から左にサイズ変更されます。
明らかに、座標の使用方法に問題があり、ランドスケープ モードのときの基準フレームとは異なりますが、それを解決する方法を整理するのにかなりの時間を費やしています。-convertRect: を使用してあらゆる種類のものを変換しようとしましたが、私が試みていることは何もありません。
これらすべての長方形と、向きが変わったときに長方形がどのように変化するかについて混乱していない人が、私が間違っていることと、これを正しく行うために何をする必要があるかを見つけてくれることを本当に望んでいます. 参考までに、私が抱えている問題を再現する最も単純なケースを示すプロジェクトを作成しました。