>我有一个表视图,它有表视图的标题和部分的另一个标题。部分的标题顶部有一个按钮,按下按钮时,我需要更改此标题的大小。
我确实更改了标题大小,但其中的内容不会相应更改。
我什至用这个修复了它-
_isHeaderExtended = !_isHeaderExtended;
[self.testTable beginUpdates];
CGPoint point = testTable.contentOffset;
point.y = (_isHeaderExtended)? point.y - 1: point.y + 1;
[testTable setContentOffset:point animated:NO];
[self.testTable endUpdates];
我的整个代码如下
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 30;
}
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
return testView;
}
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
[self.testTable beginUpdates];
CGFloat fl = (_isHeaderExtended)?200:100;
[self.testTable endUpdates];
return fl;
}
-(IBAction)buttonPushed:(id)sender {
_isHeaderExtended = !_isHeaderExtended;
[self.testTable beginUpdates];
CGPoint point = testTable.contentOffset;
point.y = (_isHeaderExtended)? point.y - 1: point.y + 1;
[testTable setContentOffset:point animated:NO];
[self.testTable endUpdates];
}
基本上我需要根据我使用的调整大小来拉伸标题的内容,任何想法???
我认为应该改成:
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
if( _isHeaderExtended ){
return bigTestView;
} else {
return smallTestView;
}
}
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return _isHeaderExtended?200:100;
}
-(IBAction)buttonPushed:(id)sender {
_isHeaderExtended = !_isHeaderExtended;
[self.testTable reloadData];
}
然后,您需要为标头创建一个大测试视图和一个小测试视图。
这样做:
-
消除对
beginUpdate
和endUpdate
的调用heightForHeaderInSection
.他们在datasource
协议中没有任何业务。 -
确保在标题视图中返回的视图已按预期初始化和配置。想必你在
viewDidLoad
这样做. -
为了让标题的内容拉伸,您可以将此视图的
autoresizingMask
设置为所需的值。或者,您可以使用 IB 配置视图以使用容器视图调整大小。您必须在viewForHeaderInSection
中返回大小合适的视图。
推荐的设计模式将完全不同:将所有大小的逻辑放入数据源方法(heightForHeaderInSection
和viewForHeaderInSection
),即您可以检查_isHeaderExpanded
变量。然后,在切换方法中,只需重新加载该部分即可。