问题描述
我需要根据其中的内容设置 tableViewCell
的高度.我在 tableViewCell
中有一些动态高度的标签,标签中的行数不是恒定的.有时,如果一个标签的文本为 null
,则另一个标签可能会占据其位置.所以我需要的是 tableViewCell
是否应该根据内容 autoresize
的高度?
I need to set the height of tableViewCell
according to content in it. I have some labels of dynamic height in tableViewCell
,number of lines in the label is not constant. Sometimes if a one label's text is null
then the other label may occupy its position. So what i need is tableViewCell
should autoresize
height according to the content?
-(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
的标签的最后几行.
Here i have given it to be 205 .but when the text in the tableViewCell
increases then i couldn't see the last lines of the label of last tableViewCell
..
如何使 tableViewCell
对其高度进行自动调整大小
?
推荐答案
您可以只检查textHeight,然后设置行高
You can just check for you textHeight and then set your row height
- (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;
}
如果文本为null,则将其从数组中移除,或者仅将高度传递给零..:)
and if text is null then remove it from array dear or just pass height to zero..:)
这篇关于TableViewCell根据Xcode中的内容自动调整其高度?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!