我对此问题感到非常沮丧,我希望有人可以帮助我。
从第一个屏幕可以看到原点光标位置在密码
中
将光标移动到电子邮件后,屏幕移动了一点,如屏幕截图2所示
我试图覆盖“textFieldDidBeginEditing” 甚至将观察者添加到“keyboardWillShow通知”中以获得对键盘显示的一些控制。 但两者都不起作用。它仍然只是略微下降,我想要的更多。我注意到只有当整个textField可见时才覆盖/隐藏半行,只有正确调用“textFieldDidBeginEditing”才会起作用。
我想必须有一些与tableView / ScrollView相关或与键盘或UIResponder相关的委托方法,我不确定,但需要有经验的开发人员的帮助。
由于
答案 0 :(得分:1)
看起来您正在使用分组表格视图。当它成为第一响应者时,它们会自动将文本字段滚动到可见状态。但是,正如您已经发现的那样,这意味着如果文本字段在屏幕上只有一半,它只会在顶部(或底部)一直滚动它。如果您希望它始终显示在屏幕上的特定点,您需要自己计算和设置偏移量。但是,如果直接从textFieldDidBeginEditing
回调中执行,它将被表的默认滚动覆盖,因此我们稍微延迟它。
-(void) textFieldDidBeginEditing:(UITextField *)textField
{
double delayInSeconds = 0.01;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
CGRect bounds = textField.bounds;
CGPoint offset = [self.tableView convertPoint:bounds.origin fromView:textField];
offset.x = 0;
offset.y -= 150;
[self.tableView setContentOffset:offset animated:YES];
});
}
请注意,iOS 7的表滚动有点儿错误,所以这可能会引起一些跳跃。你可以通过增加延迟直到自动滚动之后减少跳跃,0.25s应该是好的。
答案 1 :(得分:0)
- (void) textFieldDidBeginEditing:(UITextField *)textField{
//if you just want to set the contentOffset when editing emailField add following condition
if (textField==emailField) {
float yOffSet = someValue;
[mytableView setContentOffset:CGPointMake(0.0f, yOffSet)];
[emailField becomeFirstResponder];
}