看起来您正在使用分组表视图。当它成为第一响应者时,它们会自动滚动文本字段以使其可见。但是,正如您所发现的,这意味着如果文本字段在屏幕上占一半,它只会一直滚动到顶部(或底部)。如果您希望它始终显示在屏幕上的特定点,您需要自己计算和设置偏移量。但是,如果您直接从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 应该是好的。