Iphone 显示和隐藏键盘时调整tableview的大小

Iphone 显示和隐藏键盘时调整tableview的大小,iphone,ios,uitableview,keyboard,uitextfield,Iphone,Ios,Uitableview,Keyboard,Uitextfield,我有一个带有UITableView和UITextField的视图控制器。我订阅有关键盘何时打开和关闭的通知,并使用有关键盘高度的信息调整UITableView和UITextField的大小和位置 但我有两个问题 当键盘打开时,UITextField似乎会自动重新定位自己——如果它定位正确,那就好了。它的垂直偏移似乎与选项卡栏控制器的高度相同 当键盘打开时,如何禁用UITextField尝试重新设置其sel 第二个问题是,当键盘打开时,UITableView的表格部分似乎太长了——我可以滚动到表格

我有一个带有UITableView和UITextField的视图控制器。我订阅有关键盘何时打开和关闭的通知,并使用有关键盘高度的信息调整UITableView和UITextField的大小和位置

但我有两个问题

当键盘打开时,UITextField似乎会自动重新定位自己——如果它定位正确,那就好了。它的垂直偏移似乎与选项卡栏控制器的高度相同

当键盘打开时,如何禁用UITextField尝试重新设置其sel

第二个问题是,当键盘打开时,UITableView的表格部分似乎太长了——我可以滚动到表格中最后一个元素的下方(我猜与键盘的高度相似)。打开键盘时,我将UITableView的新高度设置如下(kbSize是键盘的大小):

我错过了什么?我是否需要设置桌子的“高度”,而不仅仅是框架


谢谢,Ole

如果您将父类从
UIViewController
更改为
UITableViewController
,则操作系统将在显示键盘时调整视图大小

如果将父类从
UIViewController
更改为
UITableViewController
,则操作系统将在键盘显示时调整视图大小

您只需使用1个viewcontroller类,并在键盘弹出窗口时放入tableview,设置viewcontroller框架,y=y-140。。。。。。 像这样

-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.3];
    [UIView setAnimationTransition:UIViewAnimationTransitionNone forView:self.view cache:YES];

    scrollView.frame = CGRectMake(0, -140, 320, 460);
    [UIView commitAnimations];
    return YES;
}
-(BOOL)textFieldShouldReturn:(UITextField *)textField{
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.3];
    [UIView setAnimationTransition:UIViewAnimationTransitionNone forView:self.view cache:YES];
    scrollView.frame = CGRectMake(0, 0, 320, 460);
    [UIView commitAnimations];
    [textField resignFirstResponder];
    return YES;
}

您只需使用1个viewcontroller类并在键盘弹出时放入tableview即可设置viewcontroller框架,y=y-140。。。。。。 像这样

-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.3];
    [UIView setAnimationTransition:UIViewAnimationTransitionNone forView:self.view cache:YES];

    scrollView.frame = CGRectMake(0, -140, 320, 460);
    [UIView commitAnimations];
    return YES;
}
-(BOOL)textFieldShouldReturn:(UITextField *)textField{
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.3];
    [UIView setAnimationTransition:UIViewAnimationTransitionNone forView:self.view cache:YES];
    scrollView.frame = CGRectMake(0, 0, 320, 460);
    [UIView commitAnimations];
    [textField resignFirstResponder];
    return YES;
}