在UITableView中扩展和折叠标题单元格

时间:2014-08-08 04:07:16

标签: ios objective-c uitableview

前提很简单。我有UITablewView。我有一个故事板,我配置了两个原型单元,一个具有headerCell的重用标识符,另一个重用标识符是单元。我在UITableViewController

中实例化了一个这样的自定义标题单元格
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    MyHeaderCell* headerCell = [tableView dequeueReusableCellWithIdentifier:@"headerCell"];
    headerCell.delegate = self;

    return headerCell;
}

我的headerCell上有一个按钮,当点击该按钮时,它会调用[_delegate toggleHeaderSize]。您可以在上面看到,委托属性只是UITableViewController。这是toggleHeaderSize方法:

-(void)toggleHeaderSize {
    [self.tableView beginUpdates];

    if (headerHeight == 100) {
        headerHeight = 120;
    } else {
        headerHeight = 100;
    }
    [self.tableView endUpdates];

//    [self.tableView reloadData];

}

heightForHeaderInSection方法中使用了headerHeight变量,如下所示:

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    return headerHeight;
}

标题会改变大小,但这很奇怪。桌子向下滑动,但标题实际上并没有增长。如果我只用一个像素滚动表格,那么标题似乎意识到它需要重绘,并且它会按照大小进行捕捉。

我想我已经阅读了有关调整标题单元格大小的每篇文章。他们似乎都认为魔术是beginUpdates/endUpdates舞蹈。这似乎是必要的,但它并没有解决重绘的问题。

这是我的问题的动画GIF。 编辑:我不能发布动画GIF,因为我没有10个声望点,但如果你去http://nspaul.imgur.com/all/你可以找到它: - )

我喜欢任何指导。如果有人愿意,我可以发布更多代码。如果有帮助,我甚至会将整个项目发布到Github

1 个答案:

答案 0 :(得分:0)

-(void)toggleHeaderSize {
    if (headerHeight == 100) {
        headerHeight = 120;
    } else {
        headerHeight = 100;
    }    
    [self.tableView reloadSections:mySections withRowAnimation:UITableViewRowAnimation];
}

方法beginUpdatesendUpdates仅为动画创建事务。您需要重新加载受影响部分的方法。