通过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
将调用每个可见单元格的数据源。 你可以通过调用UITableView
的reloadData
来触发它