前提很简单。我有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
。
答案 0 :(得分:0)
-(void)toggleHeaderSize {
if (headerHeight == 100) {
headerHeight = 120;
} else {
headerHeight = 100;
}
[self.tableView reloadSections:mySections withRowAnimation:UITableViewRowAnimation];
}
方法beginUpdates
和endUpdates
仅为动画创建事务。您需要重新加载受影响部分的方法。