UITableView 调整部分的大小标题不会根据其大小进行拉伸



>我有一个表视图,它有表视图的标题和部分的另一个标题。部分的标题顶部有一个按钮,按下按钮时,我需要更改此标题的大小。

我确实更改了标题大小,但其中的内容不会相应更改。

我什至用这个修复了它-

_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];
}

然后,您需要为标头创建一个大测试视图和一个小测试视图。

这样做:

  • 消除对beginUpdateendUpdate的调用 heightForHeaderInSection .他们在datasource协议中没有任何业务。

  • 确保在标题视图中返回的视图已按预期初始化和配置。想必你在viewDidLoad这样做.

  • 为了让标题的内容拉伸,您可以将此视图的autoresizingMask设置为所需的值。或者,您可以使用 IB 配置视图以使用容器视图调整大小。您必须在 viewForHeaderInSection 中返回大小合适的视图。

推荐的设计模式将完全不同:将所有大小的逻辑放入数据源方法(heightForHeaderInSectionviewForHeaderInSection),即您可以检查_isHeaderExpanded变量。然后,在切换方法中,只需重新加载该部分即可。

最新更新