通过UITextView内容大小调整UITableView单元的大小

我需要一些帮助。 我有一个UITableView自定义UITableViewCell。 在单元格中我有一个UITextView。 我需要做的,当用户将input一些数据到UITextView。 UITextView将从UITextView的内容resize。 我知道它 – (void)textViewDidChange:(UITextView *)textView但现在我需要调整的单元格也如果内容大小的UITextView会大于当前单元格。

问题是如何通过UITextView的内容大小来调整UITableView Cell的大小。

我的代码在下面。

@class TableCell; @interface RootViewController : UITableViewController{ UITableView*tableViewTest; TableCell *tableCell; } @property (nonatomic,retain)IBOutlet TableCell *tableCell; @property (nonatomic,retain)IBOutlet UITableView*tableViewTest; @end - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return 5; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; TableCell *cell = (TableCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { [[NSBundle mainBundle] loadNibNamed:@"TableCell" owner:self options:nil]; cell=tableCell; self.tableCell=nil; } [cell setTag:indexPath.row+1]; return cell; } - (void)textViewDidChange:(UITextView *)textView { CGRect frame = textView.frame; frame.size.height = textView.contentSize.height; textView.frame = frame; NSLog(@"Change=%f",textView.contentSize.height); } @interface TableCell : UITableViewCell <UITextViewDelegate>{ UITextView *textViewTest; } @property (nonatomic,retain) IBOutlet UITextView *textViewTest; 

感谢帮助

在UITableViewDelegate中,你可以通过函数调整你的单元格高度

 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { // do your stuff here like resize your cell height } 

之后为了反映视图的变化,你需要重新载入表格

 [self.table reloadData]; 

如果你的表中有部分,那么你不需要重新加载整个表,并避免闪烁,因为你只是重新加载你所执行的表的特定部分由该单元格的indexpath的高度变化,你也可以使用其他方式来查找所需的细胞在这里是我的风格,find我需要重新加载的细胞

 NSIndexPath *ip = [self.table indexPathForCell:cell]; [self.table reloadSections:[NSIndexSet indexSetWithIndex:ip.section] withRowAnimation:UITableViewRowAnimationAutomatic]; 

不要调用reloadData,而是使用[table beginUpdates]的东西

旧的问题,但一些自动布局魔术可能会帮助别人,如果仍然在寻找答案。

如果一切正常设置(自动布局约束),你不必自己计算任何东西。

所有你需要做的是禁用UITextView的滚动启用属性,然后在textViewDidChange调用tableView.beginUpdates()和tableView.endUpdates()。

有关详细说明,请查看我写的post ,其中还包含一个正在运行的示例项目。

你只能通过实现它的delegate heightForRowAtIndexPath:来增加自定义UITableViewCell的高度heightForRowAtIndexPath:

当单元格的textView变得比单元格高度大时,需要在UITableView实例上调用reloadData方法,而heightForRowAtIndexPath:函数必须为扩展单元格返回正确的高度。

UITableViewDelegate协议定义:

 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath; 

它允许你指定每个单元格的高度。 UITextView将调用每个可见单元格的数据源。 你可以通过调用UITableViewreloadData来触发它