1

モーダル ダイアログは、キーボードが表示されると上に移動し、キーボードが消えると下に移動します。

iPadを回転させるまでは問題ありません。標準以外の向きでは機能しません。iPad の向きを変えると、モーダル ダイアログはキーボードが上ではなく表示されたときに下に移動し、キーボードが下ではなく消えたときに上に移動します。

これは、キーボードが表示/非表示になったときにモーダル ダイアログを配置するために使用しているコードです。

- (void)textFieldDidBeginEditing:(UITextField *)textField {


        self.view.superview.frame = CGRectMake(self.view.superview.frame.origin.x, 140, self.view.superview.frame.size.width, self.view.superview.frame.size.height);

        }      
    }];

}


-(void)textFieldDidEndEditing:(UITextField *)textField {

    [UIView animateWithDuration:0.4 animations:^ {

        self.view.superview.frame = CGRectMake(self.view.superview.frame.origin.x, 212, self.view.superview.frame.size.width, self.view.superview.frame.size.height);
        }
    }];

}
4

2 に答える 2

1

フレームを設定する代わりに、次のように CGAffineTransformTranslate を使用します。

- (void)textFieldDidBeginEditing:(UITextField *)textField {
    self.view.superview.transform = CGAffineTransformTranslate(self.view.superview.transform,0,72);
    }      
}];
}


-(void)textFieldDidEndEditing:(UITextField *)textField {
[UIView animateWithDuration:0.4 animations:^ {
    self.view.superview.transform = CGAffineTransformTranslate(self.view.superview.transform,0,-72);
    }
}];
}
于 2013-04-19T13:17:48.443 に答える
0

キーボード通知を使用してみてください:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasShown:) name:UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillBeDismissed:) name:UIKeyboardWillHideNotification object:nil];

次に、セレクターでフレームを調整します。textFieldDidBeginEditing/textFieldDidEndEditing にはありません。

- (void)keyboardWasShown:(NSNotification *) notification {
    NSDictionary *info = [notification userInfo];
    NSValue *aValue = [info objectForKey:UIKeyboardFrameEndUserInfoKey];
    CGSize keyboardSize = [aValue CGRectValue].size;
    keyboardHeight = MIN(keyboardSize.height, keyboardSize.width);
    // set new frame based on keyboard size 

- (void)keyboardWillBeDismissed: (NSNotification *) notification{
    [UIView animateWithDuration:0.4 animations:^{
    // original frame 
    }];
}
于 2013-04-19T13:04:52.363 に答える