2012-01-13 146 views
5

我在UITableViewCell中有三个自定义的UILabel。像这样的单元设计,在iPhone中动态更改UITableviewCell高度?

Date(12.1.2012) Time(12.00pm) 
Cost: $20.00 
Details 

我已经在- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;中指定了行高100。但是,现在细节有时会从服务器返回空(空)。那时我需要从单元格中移除细节标签并将特定的单元格(行)高度更改为70.我该怎么做?我在Google中最好地搜索了我的级别。但是,我仍然只是困惑这样做。你能帮我么?谢谢。我从这个链接中得到了一些想法 - http://www.cimgf.com/2009/09/23/uitableviewcell-dynamic-height/。他们只使用一个标签来调整行高。请帮帮我。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return 90; 
} 

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
        static NSString *CellIdentifier = @"Cell"; 

        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
        if (cell == nil) 
        { 
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 


            UILabel *dateLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, 100, 30)]; 
            dateLabel.tag = 100; 
            dateLabel.backgroundColor = [UIColor clearColor]; 
            dateLabel.font = [UIFont fontWithName:@"Helvetica" size:16]; 
            dateLabel.font = [UIFont boldSystemFontOfSize:16]; 
            dateLabel.highlightedTextColor = [UIColor whiteColor]; 
            [cell.contentView addSubview: dateLabel]; 

      UILabel *timeLabel = [[UILabel alloc] initWithFrame:CGRectMake(120, 0, 200, 25)]; 
            timeLabel.tag = 101; 
            timeLabel.backgroundColor = [UIColor clearColor]; 
            timeLabel.font = [UIFont fontWithName:@"Helvetica" size:14]; 
            timeLabel.highlightedTextColor = [UIColor whiteColor]; 
            [cell.contentView addSubview: timeLabel]; 

      UILabel *costLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 30, 300, 25)]; 
            costLabel.tag = 102; 
            costLabel.backgroundColor = [UIColor clearColor]; 
            costLabel.font = [UIFont fontWithName:@"Helvetica" size:14]; 
            costLabel.font = [UIFont boldSystemFontOfSize:14]; 
            costLabel.highlightedTextColor = [UIColor whiteColor]; 
            [cell.contentView addSubview: costLabel]; 

            UILabel *eventLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 60, 300, 25)]; 
            eventLabel.tag = 103; 
            eventLabel.backgroundColor = [UIColor clearColor]; 
            eventLabel.font = [UIFont fontWithName:@"Helvetica" size:14]; 
            eventLabel.font = [UIFont boldSystemFontOfSize:14]; 
            eventLabel.highlightedTextColor = [UIColor whiteColor]; 
            [cell.contentView addSubview: eventLabel]; 
     } 

        UILabel *dateLabel = (UILabel *) [cell.contentView viewWithTag:100]; 
        dateLabel.text = [DateArray objectAtIndex:indexPath.row]; 

     UILabel * timeLabel = (UILabel *) [cell.contentView viewWithTag:101]; 
        timeLabel.text = [timeArray objectAtIndex:indexPath.row]; 

     UILabel * costLabel = (UILabel *) [cell.contentView viewWithTag:102]; 
        costLabel.text = [costArray objectAtIndex:indexPath.row]; 

        UILabel *eventLabel = (UILabel *) [cell.contentView viewWithTag:103]; 
     NSString *description = [eventArray objectAtIndex:indexPath.row]; 
     if([description isEqualToString:@""]) 
     { 
     eventLabel.text = @""; // Here i don't want to show this label and resize(reduce) the row height to 60; 
     } 
     else 
     { 
        eventLabel.text = description; 
     } 
        return cell; 
    } 

我该怎么做?谢谢。

回答

8

在返回高度时,检查详细描述是否为空。如果是回到60

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
NSString *description = [eventArray objectAtIndex:indexPath.row]; 
if([description isEqualToString:@""]) 
    return 60 
else 
{ 
    return 90; 
} 
} 

另外,你需要if语句@"Details"移除的标签在同在cellForRowAtIndexPath:。预先标记,从子视图中标识并从单元格中移除它。

+0

Mr.MadhavanRP感谢您的回答。我已经在我的代码中尝试了您的答案。我检查了cellForRowAtIndexPath中的条件:也。第一次它工作正常。当我滚动tableview时,单元格大小已更改,说明标签已更改位置。这意味着说明标签已删除所有行。你能帮我么。谢谢 – Gopinath 2012-01-13 07:17:37

+0

@Gopinath为什么不尝试添加细节标签作为单元格的子视图,只有当你有一些描述。您可能需要创建一个自定义类来解决滚动问题。参考这个问题的答案http://stackoverflow.com/questions/8352530/changing-the-position-of-custom-uibutton-in-custom-uitableviewcell – MadhavanRP 2012-01-13 08:48:50

0

您可以通过使用CGSize这样的检查返回字符串的大小 -

CGSize size = [detailStr sizeWithFont:[UIFont boldSystemFontOfSize:12.0f] constrainedToSize:CGSizeMake(190, 40) lineBreakMode:UILineBreakModeWordWrap]; 

你可以根据你的病情改变宽度,高度和字体。在计算大小之前,请检查detailStr是否不等于零。

+0

Mr.Sasdnib谢谢你的回答。我编辑了我的问题。请检查这个。我只是困惑你的答案,你可以帮我。谢谢。 – Gopinath 2012-01-13 05:51:37