如何消除iOS5下Section DataSource中项目之间的额外差距

时间:2012-01-10 16:44:17

标签: iphone three20

我在iOS5下的TTSectionedDataSource中遇到TTableTextItems之间的额外差距,相同的代码没有显示iOS4下的额外空间。您可以在下面的图片中看到它。 ,左边是IOS 4.3,右边是iOS5。

enter image description here

我的TTTableViewController代码是:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
        self.variableHeightRows = NO;
        self.tableViewStyle = UITableViewStyleGrouped;
        self.autoresizesForKeyboard = YES;
    }
    return self;
}

- (void) createModel {
    self.dataSource = [[[NewDataSource alloc] init] autorelease];
}

- (id<UITableViewDelegate>)createDelegate {
    return [[[NewTableDelegate alloc] initWithController:self] autorelease];
}

TTTableViewDelegate代码是:

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
    if (section == 0) {
        return 70   ;
    }
    return 200;
}

我的TTSectionedDataSource:

- (void) tableViewDidLoadModel:(UITableView *)tableView {
    [super tableViewDidLoadModel:tableView];
    [self.sections addObject:@"Section 1"];
    [self.items addObject:[NSArray arrayWithObject:[TTTableTextItem itemWithText:@"TTTableTextItem1" URL:@""]]];
    [self.sections addObject:@"Section 2"];
    [self.items addObject:[NSArray arrayWithObject:[TTTableTextItem itemWithText:@"TTTableTextItem 2" URL:@""]]];
}

问题正在发生,因为- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section中的方法TTTableViewDelegate在iOS4下被调用2次(值为1和0)并且被调用4次(值1,1,0和0) )在iOS5下,这就是为什么我可以看到TTTableTextItems之间的额外差距。

为什么会发生这种情况以及如何预防?

2 个答案:

答案 0 :(得分:0)

您可以发布TTSectionedDataSource的完整代码吗?

如果您认为这是与iOS 5相关的错误,您可以尽可能详细地在https://github.com/facebook/three20/issues打开github问题

答案 1 :(得分:0)

问题与iOS5下- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section的新行为有关。

来自Apple文档:

  

在iOS 5.0之前,对于tableView:viewForFooterInSection:返回零视图的部分,表视图会自动将页脚高度调整为0。在iOS 5.0及更高版本中,您必须在此方法中返回每个部分页脚的实际高度。