动画调整UITableView的UIView标头的大小

时间:2013-05-10 02:41:25

标签: iphone ios objective-c uitableview uistoryboard

基本上,我想复制Facebook for iPhone登录界面中的行为:当触摸输入字段时,徽标/标题视图的高度会减小,以便为键盘腾出空间。

这里我有一个UITableView(含静态内容):

My Login Scene

“控件”实际上是UIView我在UIImageView中包含徽标,“表视图部分”包含用户名/密码的UITextField。

我的问题是,如何让UIView(“Control”)降低高度,同时让“Table View Section”中的UITableViewCells自然向上滑动?我尝试过以下方法:

 [UIView animateWithDuration:1.0f animations:^{
    CGRect theFrame = _headerView.frame;
    theFrame.size.height -= 50.f;
    _headerView.frame = theFrame;
}];

其中_headerView是标头的UIView。它被调整大小,但UITableView没有反应,好像UITableViewCell被调整大小(即登录UITableViewCells没有向上移动)。我该如何解决这个问题?

我已经看到了如何调整UITableViewCell大小的示例,但我无法将标题/徽标放在UITableViewCell中,因为表格视图部分已分组,不应该像登录一样部分。

修改

很棒的答案!以下是我最终使用view_is_up实例变量设置动画的方法:

-(void)moveTableView:(BOOL)up{
    float move_distance = 55.f;
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:.3f];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
    UIEdgeInsets insets = self.tableView.contentInset;
    if(view_is_up&&!up){
        insets.top += move_distance;
        view_is_up = NO;
    }
    else if(!view_is_up&&up){
        insets.top -= move_distance;
        view_is_up = YES;
    }
    self.tableView.contentInset = insets;
    [UIView commitAnimations];
}

它工作得很漂亮,并且可以通过UIView动画完全配置。

1 个答案:

答案 0 :(得分:1)

如果您在动画的块中添加以下代码,则应修复它:

UIEdgeInsets insets = self.tableView.contentInset;
insets.top -= 50.f;
self.tableView.contentInset = insets;

其中self.tableView是UITableView的插座