我有一个简单的UITextField
,当有人去编辑它,键盘弹出时,视图会向上移动,以便用户可以看到他们输入的内容。但是,当我关闭键盘时,视图没有返回到原始位置!我使用CGPoint
属性捕获viewDidLoad
上的原始位置,然后在键盘关闭时尝试将其设置回原来的位置。
代码:
- (void)viewDidLoad {
[super viewDidLoad];
// Set the original center point for shifting the view
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];
self.originalCenter = self.view.center;
}
- (void)doneWithNumberPad {
[locationRadius resignFirstResponder];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.25];
self.view.center = self.originalCenter;
[UIView commitAnimations];
}
- (void)keyboardDidShow:(NSNotification *)note
{
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.25];
self.view.center = CGPointMake(self.originalCenter.x, 150);
[UIView commitAnimations];
}
答案 0 :(得分:1)
调用viewDidLoad
时,尚未针对当前设备的屏幕大小或方向布置视图层次结构。现在看self.view.center
还为时过早。
请改为viewDidLayoutSubviews
。
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
self.originalCenter = self.view.center;
}
请注意,如果您支持自动旋转,如果在自动旋转发生时键盘可见,即使这样也无法正常工作。
答案 1 :(得分:0)
如果你不需要一个绝对的最终中心位置,一个可靠的方法来实现这个功能就是将视图向上移动一个由键盘显示时定义的固定值,并将其向下移动固定值。键盘隐藏。
#define OFFSET 100
- (void)doneWithNumberPad {
[locationRadius resignFirstResponder];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.25];
self.view.center = CGPointMake(self.view.center.x, self.view.center.y + OFFSET);
[UIView commitAnimations];
}
- (void)keyboardDidShow:(NSNotification *)note
{
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.25];
self.view.center = CGPointMake(self.view.center.x, self.view.center.y - OFFSET);
[UIView commitAnimations];
}