3

私は通常次のように見えるかなり基本的なインターフェースを持っています:

ここに画像の説明を入力してください

かなり刺激を受けていませんが、それが仕様の作成方法です。いずれにせよ、問題の一部は、オンスクリーンキーボードがポップアップすると、これが発生することです。

ここに画像の説明を入力してください

今ではそれ自体は大きな問題ではありません。の中にすべてがあり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他のすべてのコントロールと同様に、インタラクションに応答します。ただし、すべての「アドレス」フィールドは機能しなくなります。

基本的に、スクロールして表示に戻す前にキーボードの後ろに隠れていたすべてのコントロールは、まだキーボードの後ろに隠れていると考えているようです。これを修正する方法について何かアイデアはありますか?

4

1 に答える 1

2

私はこれに対する解決策を見つけました。基本的に私が最初に持っていたレイアウトは次のようでした:

UIScrollView
    UIView
        <Components>

スクロールビュー内のコンテナビューは厳密には必要ではありませんでしたが、それが何かを傷つけることはないようでした。その仮定は、結局のところ、間違っていました。簡単に言うと、インターフェイスを次のように構成するように変更しました。

UIScrollView
    <Components>

そしてそれは問題を解決しました。理由はよくわかりませんが、この情報が次の人にこの問題に遭遇するのに役立つことを願っています。

于 2012-07-17T04:53:57.877 に答える