我有一个表格视图控制器,我drag-and-drop an additional UIView
on a storyboard to make a header,它成为UITableView
的子视图。
我不使其成为viewForHeaderInSection:
和朋友的“官方”标题标题(我将解释原因),它只是表格视图的子视图,显示在顶部该表的内容,以及视图层次结构中的内部表视图包装器和刷新控件视图。
层次结构如下所示:
UITableView 0,0 320x455
UIRefreshControl 0,0 320x60
UITableViewWrapperView 0,0 320x455
cell 0,190 320x44
cell 0,146 320x44
cell 0,102 320x44
cell 0, 58 320x44
custom UIView 0,0 320x58
现在,标题视图效果很好......直到我想调整它的大小。这个想法是,标题视图有一个文本字段,当聚焦时,会导致其他表单字段在其下展开,从而推动表格单元格。
问题在于我几乎无法控制细胞的排列。在调整自定义视图大小时(通过更改其框架),它会覆盖表包装器视图。
那么,为什么我不把它作为章节标题视图并通过heightForHeaderInSection:
调整大小?问题是当一个文本字段被聚焦或输入时,我需要调用[self.tableView reloadData]
来刷新表中的数据(按类型搜索),它会重新加载标题并使文字领域失去焦点。
总结一下,
答案 0 :(得分:1)
tableHeaderView
的解决方案(与节标题视图无关):
self.tableView.tableHeaderView
。答案 1 :(得分:0)
我还发现您需要将标题视图重新分配给表视图的tableHeaderView属性,以使其正确展开。我接下来试图找出如何动画效果。我可以使用NSTimer,在每次增量增加后重置表视图的tableHeaderView属性,但这看起来有点不稳定。试图在动画块中为它设置动画,导致了几个奇怪的效果 - 如果我在动画块中更改了高度(并重新分配了tableHeaderView属性),它可以适用于小尺寸增加,但是较大的效果会导致一些单元格动画开始时从屏幕底部消失(虽然在动画结束时,一切都很好)。最后,我发现更改表视图本身的高度,并在完成块中将其更改回原始大小,以及在完成块中更改标题的大小(再次)使一切正常。
-(void)growHeaderBy:(NSInteger) delta {
[UIView animateWithDuration:.6 animations:^{
self.tableView.frame = CGRectMake(self.tableView.frame.origin.x, self.tableView.frame.origin.y, self.tableView.frame.size.width, self.tableView.frame.size.height + delta);
self.header.frame = CGRectMake(self.headerFrame.origin.x, self.headerFrame.origin.y, self.headerFrame.size.width, self.headerFrame.size.height + delta);
self.tableView.tableHeaderView = self.header;
} completion:^(BOOL finished) {
self.tableView.frame = CGRectMake(self.tableView.frame.origin.x, self.tableView.frame.origin.y, self.tableView.frame.size.width, self.tableView.frame.size.height - delta);
self.header.frame = CGRectMake(self.headerFrame.origin.x, self.headerFrame.origin.y, self.headerFrame.size.width, self.headerFrame.size.height + delta);
self.tableView.tableHeaderView = self.header;
}];
}
headerFrame是一个设置为viewDidLoad中标题视图原始帧的属性。