我需要根据其中的内容设置tableViewCell
的高度。我在tableViewCell
中有一些动态高度标签,标签中的行数不是常数。有时,如果一个标签的文本为null
,则另一个标签可能占据其位置。那么我需要的是tableViewCell
根据内容应该autoresize
身高吗?
-(void)viewDidLoad
{
self.tableView=[[UITableView alloc] initWithFrame:CGRectMake(0,150,327,[array count]*205) style:UITableViewStylePlain];
self.tableView.delegate=self;
self.tableView.dataSource=self;
self.tableView.scrollEnabled = NO;
[self.view addSubview:self.tableView];
float fscrview = 150 + self.tableView.frame.size.height + 20;
testscroll.contentSize=CGSizeMake(320, fscrview);
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [array count];
}
-(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 *name1 = [[UILabel alloc] initWithFrame:CGRectZero];
name1.tag = 111;
name1.backgroundColor = [UIColor clearColor];
[name1 setFont:[UIFont fontWithName:@"Helvetica-Bold" size:14]];
[name1 setLineBreakMode:UILineBreakModeWordWrap];
[cell addSubview:name1];
UILabel *code = [[UILabel alloc] initWithFrame:CGRectZero];
codetype.tag = 112;
codetype.backgroundColor = [UIColor clearColor];
[codetype setFont:[UIFont fontWithName:@"Helvetica" size:12]];
[codetype setLineBreakMode:UILineBreakModeWordWrap];
[cell addSubview:codetype];
line1 = [[UILabel alloc] initWithFrame:CGRectZero];
line1.tag = 113;
line1.backgroundColor = [UIColor clearColor];
[line1 setFont:[UIFont fontWithName:@"Helvetica" size:12]];
[line1 setLineBreakMode:UILineBreakModeWordWrap];
[cell addSubview:line1];
line3 = [[UILabel alloc] initWithFrame:CGRectZero];
line3.tag = 114;
line3.backgroundColor = [UIColor clearColor];
[line3 setFont:[UIFont fontWithName:@"Helvetica" size:12]];
[line3 setLineBreakMode:UILineBreakModeWordWrap];
[cell addSubview:line3];
city = [[UILabel alloc] initWithFrame:CGRectZero];
city.tag = 115;
city.backgroundColor = [UIColor clearColor];
[city setFont:[UIFont fontWithName:@"Helvetica" size:12]];
[city setLineBreakMode:UILineBreakModeWordWrap];
[cell addSubview:city];
}
cell.accessoryType= UITableViewCellAccessoryDetailDisclosureButton;
NSMutableDictionary *d =[[NSMutableDictionary alloc]initWithDictionary: [arr2 objectAtIndex:indexPath.row]];
NSString *name2 = [d objectForKey:@"Name"];
CGSize constraint1 = CGSizeMake(175, 2000.0f);
CGSize size1 = [name2 sizeWithFont: [UIFont fontWithName:@"Helvetica-Bold" size:14] constrainedToSize:constraint1 lineBreakMode:UILineBreakModeWordWrap];
UILabel *name1 = (UILabel *)[cell viewWithTag:111];
name1.frame = CGRectMake(105,25, 175, size1.height);
[name1 setNumberOfLines:size1.height/16];
name1.text = [d objectForKey:@"Name"];
[name1 setTextColor:UIColorFromRGB(COLOR_BLUE)];
NSString *codetype2 = [d objectForKey:@"Type"];
CGSize constraint2 = CGSizeMake(175, 2000.0f);
CGSize size2 = [codetype2 sizeWithFont: [UIFont fontWithName:@"Verdana" size:12] constrainedToSize:constraint2 lineBreakMode:UILineBreakModeWordWrap];
UILabel *codetype1 = (UILabel *)[cell viewWithTag:112];
codetype1.frame = CGRectMake(105,name1.frame.size.height+25, 175, size2.height);
[codetype1 setNumberOfLines:size2.height/16];
codetype1.text=[d objectForKey:@"CodeType"];
NSString *line2 = [d objectForKey:@"Line1"];
NSString *line4 = [d objectForKey:@"Line2"];
if([line2 isEqualToString:@""])
{
if([line4 isEqualToString:@""])
{
NSString *city2 = [d objectForKey:@"City"];
CGSize constraint4 = CGSizeMake(175, 2000.0f);
CGSize size4 = [city2 sizeWithFont: [UIFont fontWithName:@"Verdana" size:12] constrainedToSize:constraint4 lineBreakMode:UILineBreakModeWordWrap];
city = (UILabel *)[cell viewWithTag:115];
city.frame = CGRectMake(105,codetype1.frame.size.height+codetype1.frame.origin.y, 175, size4.height);
[city setNumberOfLines:0];
city.text = [d objectForKey:@"City"];
}
else
{
NSString *line4 = [d objectForKey:@"Line2"];
CGSize constraint4 = CGSizeMake(175, 2000.0f);
CGSize size4 = [line4 sizeWithFont: [UIFont fontWithName:@"Verdana" size:12] constrainedToSize:constraint4 lineBreakMode:UILineBreakModeWordWrap];
line3 = (UILabel *)[cell viewWithTag:114];
line3.frame = CGRectMake(105,codetype1.frame.size.height+codetype1.frame.origin.y, 175, size4.height);
[line3 setNumberOfLines:0];
line3.text = [d objectForKey:@"Line2"];
NSString *city2 = [d objectForKey:@"City"];
CGSize constraint5 = CGSizeMake(175, 2000.0f);
CGSize size5 = [city2 sizeWithFont: [UIFont fontWithName:@"Verdana" size:12] constrainedToSize:constraint5 lineBreakMode:UILineBreakModeWordWrap];
city = (UILabel *)[cell viewWithTag:115];
city.frame = CGRectMake(105,line3.frame.size.height+line3.frame.origin.y, 175, size5.height);
[city setNumberOfLines:0];
city.text = [d objectForKey:@"City"];
}
}
else
{
NSString *line2 = [d objectForKey:@"Line1"];
CGSize constraint3 = CGSizeMake(175, 2000.0f);
CGSize size3 = [line2 sizeWithFont: [UIFont fontWithName:@"Verdana" size:12] constrainedToSize:constraint3 lineBreakMode:UILineBreakModeWordWrap];
line1 = (UILabel *)[cell viewWithTag:113];
line1.frame = CGRectMake(105,codetype1.frame.size.height+codetype1.frame.origin.y, 175, size3.height);
[line1 setNumberOfLines:0];
line1.text = [d objectForKey:@"Line1"];
if([line4 isEqualToString:@""])
{
NSString *city2 = [d objectForKey:@"City"];
CGSize constraint5 = CGSizeMake(175, 2000.0f);
CGSize size5 = [city2 sizeWithFont: [UIFont fontWithName:@"Verdana" size:12] constrainedToSize:constraint5 lineBreakMode:UILineBreakModeWordWrap];
city = (UILabel *)[cell viewWithTag:115];
city.frame = CGRectMake(105,line1.frame.size.height+line1.frame.origin.y, 175, size5.height);
[city setNumberOfLines:0];
city.text = [d objectForKey:@"City"];
}
else
{
NSString *line4 = [d objectForKey:@"Line2"];
CGSize constraint4 = CGSizeMake(175, 2000.0f);
CGSize size4 = [line4 sizeWithFont: [UIFont fontWithName:@"Verdana" size:12] constrainedToSize:constraint4 lineBreakMode:UILineBreakModeWordWrap];
line3 = (UILabel *)[cell viewWithTag:114];
line3.frame = CGRectMake(105,line1.frame.size.height+line1.frame.origin.y, 175, size4.height-3);
[line3 setNumberOfLines:0];
line3.text = [d objectForKey:@"Line2"];
NSString *city2 = [d objectForKey:@"City"];
CGSize constraint5 = CGSizeMake(175, 2000.0f);
CGSize size5 = [city2 sizeWithFont: [UIFont fontWithName:@"Verdana" size:12] constrainedToSize:constraint5 lineBreakMode:UILineBreakModeWordWrap];
city = (UILabel *)[cell viewWithTag:115];
city.frame = CGRectMake(105,line3.frame.size.height+line3.frame.origin.y+4, 175, size5.height);
[city setNumberOfLines:0];
city.text = [d objectForKey:@"City"];
}
}
UILabel *state=[[UILabel alloc]initWithFrame:CGRectMake(105,city.frame.size.height+city.frame.origin.y+5,320,10)];
state.font=[UIFont fontWithName:@"Helvetica" size:12];
[state setTextAlignment:UITextAlignmentLeft];
[state setText:[d valueForKey:@"State"]];
state.tag=116;
[cell addSubview:state];
[state release];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
UIView *sectionHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, tableView.sectionHeaderHeight)];
sectionHeaderView.backgroundColor = [UIColor colorWithWhite:0 alpha:0];
sectionHeaderView.userInteractionEnabled = YES;
sectionHeaderView.tag = section;
UILabel *headerLabel = [[UILabel alloc] initWithFrame:CGRectMake(12,2, tableView.bounds.size.width-10, 18)];
headerLabel.backgroundColor = [UIColor whiteColor];
[headerLabel setTextAlignment:UITextAlignmentCenter];
headerLabel.textColor = [UIColor grayColor];
headerLabel.shadowColor = [UIColor darkGrayColor];
headerLabel.shadowOffset = CGSizeMake(0, 1);
headerLabel.font = [UIFont boldSystemFontOfSize:18];
headerLabel.text = @"Details";
[sectionHeaderView addSubview:headerLabel];
return sectionHeaderView;
}
我在这里给它205.但是当tableViewCell
中的文字增加时,我看不到最后tableViewCell
标签的最后几行..
如何让tableViewCell
升至auto-resize
高度?
答案 0 :(得分:1)
您可以在– tableView:heightForRowAtIndexPath:
中指定单元格的高度。
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
CGFloat height=60; //set default row height
if(check_for_the_rows_which_need_increased_height) {
height+=50; //Add appropriate increase
}
return height;
}
您需要致电[yourTableView reloadData]
或[yourTableView reloadRowsAtIndexPaths:indexPath withRowAnimation:UITableViewRowAnimationAutomatic]
以便再次调用上述方法。
答案 1 :(得分:1)
您可以检查textHeight,然后设置行高
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
{
NSString *Yourtext = [yourTextAry objectAtIndex:[indexPath row]];
CGSize constraint = CGSizeMake(yourLabelWidth , 20000.0f);
CGSize size = [Yourtext sizeWithFont: [UIFont fontWithName:@"Verdana" size:13] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];
CGFloat height = MAX(size.height, 44.0f);
return height;
}
如果text为null,则将其从数组dear中删除,或者只将高度传递给零..:)