1

私は他の誰かのコードをデバッグしています - 申し訳ありませんが、Objective-C の経験は非常に限られています。

#pragma mark - Keyboard events

- (void)keyboardWasShown:(NSNotification*)aNotification
{
    NSDictionary* info = [aNotification userInfo];
    CGSize kbSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
    NSLog(@"Keyboard a Notification user Info %@", info);

    printf("keyboardWasShown \\\\\\\\\\\\\\\\\\\\\n");
    NSLog(@"textInputView: y: (%.f), height: (%.f), kbHeight: (%.f)",
        textInputView.frame.origin.y, textInputView.frame.size.height, kbSize.height);

    [UIView animateWithDuration:2.0f animations:^{
        if (keyboardNewLine){
            bubbleTableFrame = originalBubbleTableFrame;
        }
        CGRect frame = originalTextViewFrame;
        int difference = 0;

        if (IsIphone5){
                difference = -42;
                frame.origin.y -= kbSize.height + difference;

        } else {
            if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0f) {
                difference = 42;
                frame.origin.y -= kbSize.height + difference;
            } else {
                frame.origin.y -= kbSize.height + 110;
                difference = 42;
            }
        }
        textInputView.frame = frame;

        frame = bubbleTableFrame;
        frame.size.height -= kbSize.height + difference;
        bubbleTable.frame = frame;
    }];

    NSLog(@"textInputView: y: (%.f), height: (%.f), kbHeight: (%.f)",
          textInputView.frame.origin.y, textInputView.frame.size.height, kbSize.height);
    printf("keyboardWasShown //////////\n");

    [bubbleTable scrollBubbleViewToBottomAnimated:YES];
}

テキスト入力フィールドをタップしてキーボードを表示すると、フィールドがキーボードのすぐ上に移動することがあります。それはすべて、どのキーボードが最初に読み込まれるかによって異なります。

  1. キーボードなしのテキスト フィールド:

https://dl.dropboxusercontent.com/u/674780/img/stackoverflow/1.png

  1. テキスト フィールドをタップした後、次のことを期待します。

https://dl.dropboxusercontent.com/u/674780/img/stackoverflow/2.png

  1. ただし、テキスト フィールドは画面の下部にとどまり、プレースホルダーのみが残ります。

ここに画像の説明を入力

  1. 奇妙なことに、QuickType の行を下にドラッグすると、テキスト フィールドが突然表示されます。

ここに画像の説明を入力

  1. しかし、このビューを終了して後で戻ってくると、テキスト フィールドが一番下に表示されたままになります (QuickType の行を上にドラッグすると、テキスト フィールドが飛び出します)。

ここに画像の説明を入力

  1. 地球アイコンをタップして別のキーボード (入力方法) に切り替えると、常にテキスト フィールドが表示されます。

ここに画像の説明を入力

  1. サードパーティのキーボードは影響を受けていないようです:

ここに画像の説明を入力

textInputView.frame.origin.yを監視し続けて、何が問題なのかを確認していることがわかります。472 (キーボードなし) から 261 (英語キーボード) に変わりますが、テキスト フィールドは単純に上がりません。

バブルの横にある白い領域をタップすると、キーボードが下に移動し、下部にスタックしているテキスト フィールドが表示されるため、プレースホルダー (存在する場合) の背後にあるとは思いません。

誰かがsetNeedsDisplay、setNeedsLayoutなどを追加することを提案しましたが、役に立ちませんでした。

前もって感謝します。

4

1 に答える 1

0

最終的に、誰かが提案したように、自動レイアウトをオフにしました: https://www.facebook.com/groups/cocoahk/permalink/1104922892867587/

出来た。他のすべてのオブジェクトの位置を調整する必要がありましたが。

于 2015-04-14T09:00:41.990 に答える