2

我在现有的基础上再添加一个部分tableView并得到这个:

在此处输入图像描述

我的新牢房减少了高度。适当的方法:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return cells[indexPath.section][indexPath.row];
}

- (CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if ([headers[section] isKindOfClass:[UIView class]])
        return [headers[section] frame].size.height;

    return 10.0f;
}

- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    if ([headers[section] isKindOfClass:[UIView class]])
        return headers[section];

    return nil;
}

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = cells[indexPath.section][indexPath.row];

    if (cell == clientXibCell) return 100.0f;
    if (cell == agencyXibCell) return 145.0f;
    return 46.0f;
}

我不明白我需要做什么来解决这个问题。有什么想法可以解决问题的根源吗?

更新 我现在确定预定义的自定义单元格可视界面会造成麻烦。

supervisorCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:nil];
    bgView = [[UIImageView alloc] initWithFrame:supervisorCell.backgroundView.frame];
    [bgView setImage:stretchableImageByHorizontal([UIImage imageNamed:@"cell_bgd_bottom"])];
    [supervisorCell setBackgroundView:bgView]; 
    bgView = [[UIImageView alloc] initWithFrame:supervisorCell.backgroundView.frame];
    [bgView setImage:stretchableImageByHorizontal([UIImage imageNamed:@"cell_bgd_bottom_active"])];
    [supervisorCell setSelectedBackgroundView:bgView];

当我取消注释除创建单元格的第一条语句之外的所有内容时,除了单元格的自定义外观外,一切正常。我需要在这个简单的代码中更改什么来解决这个问题?

4

1 回答 1

2

单元格的高度由heightForRowAtIndexPath:. 看看你的代码,这个方法似乎总是返回46.

您的两个ifs正在比较指针,即您的单元格的实例。这意味着在您的所有单元格中,一个将具有高度100,一个145和所有其他单元格46.f

我认为您要完成的是为所有同类单元格设置此高度,因此您应该更改heightForRowAtIndexPath:方法,如下所示:

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

    if ( [cell isKindOfClass:[YourCustomCell1 class]] ) return 100.0f;
    if ( [cell isKindOfClass:[YourCustomCell2 class]] ) return 145.0f;
    return 46.0f;
}

Ps1:为您自己的课程更改YourCustomCell课程。如果您没有子类,请尝试设置标签或类似的东西来区分它们。

ps2:总是使用tableview的方法cellForRowAtIndexPath通过indexPath获取单元格的引用。

于 2013-08-18T15:54:57.773 回答