我有一个带有UITableView的故事板。 tableView获取一个tableViewHeader,如:
----------------------
| Button |
| Label |
----------------------
仅在满足条件时才会显示该按钮。此外,如果单击该按钮,则标题必须为:
----------------------
| Label |
----------------------
我尝试了很多东西,比如:
[UIView animateWithDuration:0.3 delay:0 options: UIViewAnimationCurveEaseOut
animations:^{
self.tableView.contentOffset = CGPointMake(0, 59);
}
completion:^(BOOL finished) {
if (finished) {
self.tableView.contentOffset = CGPointMake(0, 59);
self.viewButton.hidden = YES;
}
}
];
如果单击按钮,这很有效。但是一旦我向上滚动表格视图,它会在0处反弹,然后失去偏移量,我的表视图看起来像:
----------------------
| |
| Label |
----------------------
我还尝试了各种视图操作并尝试重置tableViewHeader,如:
CGRect frame = self.tableView.tableHeaderView.frame;
frame.size.height = 31;
self.tableView.tableHeaderView = [[UIView alloc] initWithFrame:frame];
[self.tableView.tableHeaderView addSubview:self.viewTitle];
获得结果:
----------------------
| |
| Label |
----------------------
我看到有关将UITableViewController更改为UIViewController的问题,我的问题将通过操作视图控制器框架来解决,但我有10个表视图,我没有时间进行所需的所有更改。 / p>
拜托,有人可以帮助我吗?
答案 0 :(得分:5)
通过将相同的对象重新分配给表视图标题,我解决了类似的问题:
self.tableView.tableHeaderView = self.tableView.tableHeaderView;
请注意,在此分配之前,应已调整表头视图的大小。
答案 1 :(得分:0)
不知道它是否只是一个复制/粘贴问题,但我认为当你改变标题框时你会错过一个步骤;试试这个:
CGRect frame = self.tableView.tableHeaderView.frame;
frame.size.height = 31;
self.tableView.tableHeaderView.frame = frame;
如果省略最后一个作业,则刚刚创建了一个本地CGRect
并修改了其值,而不是实际更改了标题的框架。
答案 2 :(得分:0)
我决定使用内置UITableView的UIViewController。我的建议是:忘记UITableViewController。这是一团糟。解决方案是:
按钮:
- (IBAction)synchronizeTouchUpInside:(id)sender {
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3];
self.view.frame = CGRectMake(0, -59, 320, 367 + 59);
[UIView commitAnimations];
}
viewWillAppear中:
- (void)viewWillAppear:(BOOL)animated {
if (1 == 1) {
self.view.frame = CGRectMake(0, -59, 320, 367 + 59);
} else {
self.view.frame = CGRectMake(0, 0, 320, 367);
}
}
现在我只需要重建很多表视图控制器。 C'est la vie。