扩展的UITableviewCell高度不可管理

时间:2015-03-30 09:20:48

标签: ios objective-c xcode uitableview uicollectionviewcell

我在我的应用程序中使用this,我为UITableview创建了两个标识符,一个是"正常单元格"另一个是'#34;消耗的细胞"这将显示有人点击正常单元格#34;。我的问题是我无法分别管理两个单元格的高度,例如我希望正常的单元格高度为120,扩展单元格为60.但如果我在heightForRowAtIndexPath中更改高度,则两个单元格显示相同的高度。这是我的代码。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    FSParallaxTableViewCell *cell = nil;
    static NSString *cellIdentifier = nil;
    if ([indexPath isEqual:self.expandedIndexPath]) {
        cellIdentifier = @"ExpandedCell";
    }
    else {
        cellIdentifier = @"NormalCell";
    }
    cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
    if (cell == nil) {
        cell = [[FSParallaxTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
    }
    if ([[cell reuseIdentifier] isEqualToString:@"ExpandedCell"]) {
        cell.contentView.backgroundColor = [UIColor grayColor];
    }
    if ([[cell reuseIdentifier] isEqualToString:@"NormalCell"]) {
        [cell.cellImageView sd_setImageWithURL:[NSURL URLWithString:[[rssOutputData objectAtIndex:indexPath.row]xmllink]]
                              placeholderImage:[UIImage imageNamed:@"placeholder"] options:indexPath.row == 0 ? SDWebImageRefreshCached : 0];
        cell.clipsToBounds = YES;
    }
    return cell;
}
- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // disable touch on expanded cell
    UITableViewCell *cell = [self.theTableView cellForRowAtIndexPath:indexPath];
    if ([[cell reuseIdentifier] isEqualToString:@"ExpandedCell"]) {
        return;
    }
    // deselect row
    [tableView deselectRowAtIndexPath:indexPath
                             animated:NO];
    // get the actual index path
    indexPath = [self actualIndexPathForTappedIndexPath:indexPath];
    // save the expanded cell to delete it later
    NSIndexPath *theExpandedIndexPath = self.expandedIndexPath;
    // same row tapped twice - get rid of the expanded cell
    if ([indexPath isEqual:self.expandingIndexPath]) {
        self.expandingIndexPath = nil;
        self.expandedIndexPath = nil;
    }
    // add the expanded cell
    else {
        self.expandingIndexPath = indexPath;
        self.expandedIndexPath = [NSIndexPath indexPathForRow:[indexPath row] + 1
                                                    inSection:[indexPath section]];
    }
    [tableView beginUpdates];
    if (theExpandedIndexPath) {
        [theTableView deleteRowsAtIndexPaths:@[theExpandedIndexPath]
                            withRowAnimation:UITableViewRowAnimationNone];
    }
    if (self.expandedIndexPath) {
        [theTableView insertRowsAtIndexPaths:@[self.expandedIndexPath]
                            withRowAnimation:UITableViewRowAnimationNone];
    }
    [tableView endUpdates];
    // scroll to the expanded cell
    [self.theTableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionMiddle
                                     animated:YES];
}

任何人都可以帮我解决这个问题我想分别设置两个单元格的高度。

3 个答案:

答案 0 :(得分:1)

在heightForAtIndexpath方法

中添加以下代码
 if ([indexPath isEqual:self.expandedIndexPath]) {
    return 60.0;
}
else 
   return 120.0f;

答案 1 :(得分:0)

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
    }
    if ([[cell reuseIdentifier] isEqualToString:@"ExpandedCell"]) {
        return 60;
    }
    if ([[cell reuseIdentifier] isEqualToString:@"NormalCell"]) {
        return 120;
    }
}

答案 2 :(得分:0)

您必须分别设置表格视图单元格的高度。您可以根据行分别设置高度。在下面的代码中,我设置了第1行高度35,第2行高度70,行的其余部分将具有高度65.

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

        switch (indexPath.row)

        {
            case 0:

                return 35;
                break;

            case 1:
                return 70;
                break;

            default:

                return 65;
                break;

        }


    }
相关问题