4

一个很简单的问题...

我们可以在 UItableView 中仅更改当前行(单击的行)的高度吗?

注意:我不希望对剩余行的大小产生任何影响。

4

4 回答 4

8

是的你可以。您需要一个保留最后选择的行的变量。例如:

@property (nonatomic, assign) NSInteger selectedRow;

...然后实现方法

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    if(indexPath.row == self.selectedRow) {
        return 100.;
    }

    return 44.;
}

然后,更新方法:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [tableView deselectRowAtIndexPath:indexPath animated:YES];

    if(self.selectedRow == indexPath.row)
        self.selectedRow = -1;
    else
        self.selectedRow = indexPath.row;

    //The magic that will call height for row and animate the change in the height
    [tableView beginUpdates];
    [tableView endUpdates];
}

注意:在开始时初始化您self.selectedRow-1值,默认值为0

于 2013-05-13T10:49:04.237 回答
1

您可以heightForRowAtIndexPath用于设置行的高度

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

您可以检查NSIndexPath并返回height该特定的indexpath

于 2013-05-13T10:50:33.117 回答
0
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    if(indexPath.row == rowtochangeheight) {
        return 60;
    }
    else
    {
        return 44;
    }


}
于 2013-05-13T10:51:44.543 回答
0

是的,您可以这样做,但是您需要保存所选行的索引路径,并且必须将 selectedRow 变量初始化为负值。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    selectedRow = indexpath.row;
    [tblView reloadData];
}

- (float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row == selectedRow)
        return 150.0f;

    return 30;
}
于 2013-05-13T10:53:47.833 回答