更改tableHeaderView的高度会隐藏单元格

14
在我的UITableView中,有一个tableHeaderView应该根据内容自动调整大小。大小调整工作正常,但是tableHeaderView会遮挡前几个单元格。显然更改tableHeaderView的框架不会重新组织视图的其余部分。
我已经尝试调用[self.tableView layoutSubViews]和[self.tableView setNeedsLayout],但是它们也没有帮助。还尝试将Interface Builder中的tableHeaderView提供给outlet,以更改其框架,但这也不会重新组织tableView。
如何更改tableHeaderView的大小,而不隐藏任何单元格,并重新组织tableView?

1
尝试在你的viewForheaderInSection中输入[myView setClipsToBounds:YES];,然后你就可以看到你的视图占用了多少空间。 - Seega
2个回答

23
尝试在调整内容大小后设置UITableView的tableHeaderView属性。
[self.tableView setTableHeaderView:self.myResizedTableHeaderView];

这解决了我的问题,希望能帮到你。


3
特别针对我而言,我将尺寸调整推迟到视图即将出现的时候:因为我的控制器是动态实例化的,因此在那之前没有合适的几何参考。 - qix

4

我不知道您是如何创建UITableView的,但是我尝试使用tableHeaderView创建了一个UITableView,并且它正在调整大小。

我创建了一个继承自UITableViewController的类。

@interface MyTableViewController : UITableViewController {

}

@end

对于实现部分,在viewDidLoad中我添加了以下内容:

UIView *header = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 100)];
[header setBackgroundColor:[UIColor redColor]];
self.tableView.tableHeaderView = header;

enter image description here


我通过使用一个nib文件创建了TableView,其中包含了一个TableViewController。在这里,我为tableHeaderView添加了一个视图,并插入了一个包含内容的标签。我通过调整IBOutlet来更改内容和标签框架。但是,对于tableHeaderView IBOutlet执行相同操作并不能重新组织TableView。 - SpacyRicochet
2
最终,我使用了这种方法,而不是在Interface Builder中创建视图。谢谢! - SpacyRicochet
嘿!为什么我将相同的行添加到viewDidLoad中,但是我看不到上面的红色块?! - János
回答不错,但如果您不从UITableViewController继承,则无法解决问题。 - Chris
好奇怪的问题 :( 花了一天时间才弄明白。在viewController中使用tableHeaderView + tableView与动态内容存在错误。tableHeaderView重叠单元格,阻止用户交互,didSelectRow等...从UIViewController + tableView切换到UITableViewController对我很有帮助 :) 非常感谢! - polo987

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接