如何dynamic设置UITableView的高度?

我有一个tableview与不同的单元格高度使用heightForRowAtIndexPath:方法。

我想dynamic设置UITableView的高度。 目前,我正在使用viewDidLoad方法设置tableView的维度:

 self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(10, 770, 310, 400)]; self.tableView.dataSource = self; self.tableView.delegate = self; 

我想也许我可以添加这个: self.tableView.contentSize.height; 但是问题当然是内容大小只能在表格加载后计算,所以如果我把它放进去

 self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(10, 770, 310, self.tableView.contentSize.height)]; 

它不工作。

 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { NSString *description = [photosFromCommentsArray objectAtIndex:indexPath.row]; // NSLog(@"description is %@",description); if(description == (id)[NSNull null]) { return 70; } else { return 200; } } 

在表格视图中为contentSize属性添加观察者,并相应地调整框架

 [self.tableView addObserver:self forKeyPath:@"contentSize" options:0 context:NULL]; 

然后在callback中:

 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { CGRect frame = self.tableView.frame; frame.size = self.tableView.contentSize; self.tableView.frame = frame; } 

您可以随时设置tableView的框架。 你甚至可以animation改变大小。

你好你可以用下面的代码得到文本的高度,并根据它设置高度。

 CGFloat textViewWidth = CGRectGetWidth(textView.bounds); CGSize inset = CGSizeMake(5.0,5.0); CGSize stringSize = [myString sizeWithFont:textView.font constrainedToSize:CGSizeMake(textViewWidth-2*inset.width,1024) lineBreakMode:UILineBreakModeWordWrap]; BOOL textOutOfFit = stringSize.height+2*inset.height>CGRectGetHeight(textView.bounds); 

试试这个viewDidLoad

 [tableView setFrame:CGRectMake(tableView.frame.origin.x, tableView.frame.origin.y + 4, tableView.frame.size.width, tableView.frame.size.height - 65)];