TableViewCell 根据 xcode 中的内容自动调整其高度?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/13656857/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
TableViewCell to auto-resize its height according to content in xcode?
提问by Honey
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?
我需要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;
}
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
..
在这里,我将其设置为 205。但是当文本中的文本tableViewCell
增加时,我看不到 last 标签的最后tableViewCell
几行。
How can i make tableViewCell
to auto-resize
its height ?
我怎样才能tableViewCell
达到auto-resize
它的高度?
回答by Atif Azad
You can specify the height of a cell in – tableView:heightForRowAtIndexPath:
.
您可以在– 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;
}
You need to call [yourTableView reloadData]
or [yourTableView reloadRowsAtIndexPaths:indexPath withRowAnimation:UITableViewRowAnimationAutomatic]
for above method to be called again.
您需要调用[yourTableView reloadData]
或[yourTableView reloadRowsAtIndexPaths:indexPath withRowAnimation:UITableViewRowAnimationAutomatic]
再次调用上述方法。
回答by Rajneesh071
You can just check for you textHeight and then set your row height
你可以只检查你的 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;
}
and if text is null then remove it from array dear or just pass height to zero..:)
如果文本为空,则将其从数组中删除,或者只是将高度传递为零..:)