私は通常次のように見えるかなり基本的なインターフェースを持っています:
かなり刺激を受けていませんが、それが仕様の作成方法です。いずれにせよ、問題の一部は、オンスクリーンキーボードがポップアップすると、これが発生することです。
今ではそれ自体は大きな問題ではありません。の中にすべてがありUIScrollView
、次のコードを使用してキーボードの表示と非表示を処理しています。
- (void) moveTextViewForKeyboard:(NSNotification*)aNotification up: (BOOL) up{
NSDictionary* userInfo = [aNotification userInfo];
// Get animation info from userInfo
NSTimeInterval animationDuration;
UIViewAnimationCurve animationCurve;
CGRect keyboardEndFrame;
[[userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey] getValue:&animationCurve];
[[userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] getValue:&animationDuration];
[[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] getValue:&keyboardEndFrame];
// Animate up or down
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:animationDuration];
[UIView setAnimationCurve:animationCurve];
CGRect newFrame = referrerInfoView.frame;
CGRect keyboardFrame = [self.view convertRect:keyboardEndFrame toView:nil];
newFrame.size.height -= (keyboardFrame.size.height - 71) * (up? 1 : -1);
referrerInfoView.frame = newFrame;
referrerInfoView.contentSize = CGSizeMake(703, 633);
//FIXME: doesn't play nice with rotation when the keyboard is displayed
if (up && UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation)) {
UIView* focusedField = [referrerInfoView findFirstResponder];
if (focusedField && focusedField.frame.origin.y > 340.0) {
referrerInfoView.contentOffset = CGPointMake(0.0, focusedField.frame.origin.y - 200.0);
}
}
else {
referrerInfoView.contentOffset = CGPointMake(0.0, 0.0);
}
[UIView commitAnimations];
}
世界で最も堅牢なものではありませんが、今のところ十分に機能します。それは私をここに連れて行きます:
キーボードが画面に表示されている間、影付きのボックス内のどの要素もユーザーの操作に応答しないことを除いて、これで問題ありません。ビュー内のUIScrollView
他のすべてのコントロールと同様に、インタラクションに応答します。ただし、すべての「アドレス」フィールドは機能しなくなります。
基本的に、スクロールして表示に戻す前にキーボードの後ろに隠れていたすべてのコントロールは、まだキーボードの後ろに隠れていると考えているようです。これを修正する方法について何かアイデアはありますか?