在iPhone中dynamic更改UITableviewCell高度?
我在UITableViewCell中有三个自定义的UILabel。 像这样的单元devise,
Date(12.1.2012) Time(12.00pm) Cost: $20.00 Details
我已经在- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
指定了行高100 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
。 但是,现在细节有时会从服务器返回空(Null)。 在那个时候,我需要从单元格中删除细节标签,并将特定的单元格(行)高度更改为70.我该怎么做? 我在Google中最好地search了我的级别。 但是,我仍然只是困惑这样做。 你能帮我么? 谢谢。 我从这个链接了一些想法 – 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; }
我怎样才能做到这一点? 谢谢。
在返回高度时,检查详细描述是否为空。 如果是回报60。
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { NSString *description = [eventArray objectAtIndex:indexPath.row]; if([description isEqualToString:@""]) return 60 else { return 90; } }
另外,您需要在cellForRowAtIndexPath:
中的相同if语句中使用@"Details"
来删除标签。 预先标记,从子视图中标识并从单元格中删除。
你可以使用CGSize
来检查返回string的大小 –
CGSize size = [detailStr sizeWithFont:[UIFont boldSystemFontOfSize:12.0f] constrainedToSize:CGSizeMake(190, 40) lineBreakMode:UILineBreakModeWordWrap];
你可以根据你的情况改变宽度,高度和字体。 在计算大小之前,请检查detailStr是否不等于零。