Iphone 分区的UITableView resize标头不会根据其大小进行拉伸

Iphone 分区的UITableView resize标头不会根据其大小进行拉伸,iphone,xcode,uitableview,iphone-developer-program,sectionheader,Iphone,Xcode,Uitableview,Iphone Developer Program,Sectionheader,我有一个表视图,它有一个表视图的标题和另一个节的标题。 节的标题顶部有一个按钮,按下按钮时,我需要更改此标题的大小 我确实更改了标题大小,但其中的内容没有相应更改 我甚至用这个来修复它- _isHeaderExtended = !_isHeaderExtended; [self.testTable beginUpdates]; CGPoint point = testTable.contentOffset; point.y = (_isHeaderExtended)? point.y - 1:

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

我确实更改了标题大小,但其中的内容没有相应更改

我甚至用这个来修复它-

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


}
基本上,我需要标题的内容根据我使用的大小进行拉伸, 有什么想法吗?

这样做:

  • 消除对
    heightForHeaderInSection
    中的
    beginUpdate
    endUpdate
    的调用。他们在
    数据源
    协议中没有业务

  • 确保在标题视图中返回的视图已按预期进行初始化和配置。大概您可以在
    viewDidLoad
    中执行此操作

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


推荐的设计模式会有很大的不同:将所有大小的逻辑放入数据源方法中(
heightForHeaderInSection
viewForHeaderInSection
),也就是说,您可以检查
\u ISHEADEREXTENDED
变量。然后,在切换方法中,只需重新加载该部分。

我认为应该将其更改为:

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

然后您需要为标题创建一个bigTestView和一个smallTestView。

我确实在HeightForHeaderIn部分中删除了begin+end。。。视图是从XIB文件获得的,因此我想它处理得很好。我确实使用了autoresizemask这件事是,节头确实增长到所需的值,但就好像细胞随着动画移动,节头不是,但它会根据我的需要增长和收缩,但节内的视图不会更新-有一些视图是半蓝色的,另一个是白色的,如果我移动屏幕,它会很好地更新,但我需要它在没有任何用户的情况下运行,然后只需调用
[headerView setNeedsDisplay]并且应该更新。它不工作。。。setNeedsDisplay没有帮助:(它确实可以很好地增大和减小大小,但视图本身仍然不会更新。还有其他想法吗?我发现如果我将内容移动0.01,它会起作用,但必须有一种更好的方法,然后是这种临时方法……您可以在
willLayoutSubviews
中显式设置单元格内视图的大小,您可以覆盖它。我经常使用这种技术,它非常强大。嘿,我知道这是一个老问题。但我面临着一个类似的问题。你能告诉我你是如何解决的吗?