通过 UITextView 内容大小调整 UITableView 单元格的大小
我需要一些帮助。 我有一个带有自定义 UITableViewCell 的 UITableView。 在单元格中我有一个 UITextView。 当用户将一些数据输入 UITextView 时,我需要这样做。 UITextView 将根据 UITextView 的内容调整大小。我在 - (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;
感谢您的帮助
I need some help.
I have a UITableView with custom UITableViewCell.
In the Cell I have one UITextView.
I need to do, when the user will type some data into UITextView. UITextView will resize from content of UITextView. I realize it in - (void)textViewDidChange:(UITextView *)textView
But now I need to resize the cell also, if content size of UITextView will bigger then the current Cell.
The question is how to resize UITableView Cell by UITextView contents size.
My code bellow.
@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;
Thanks for help
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
不要调用 reloadData,而是使用 [table beginUpdates] 东西
Don't call reloadData, instead use [table beginUpdates] stuff
在 UITableViewDelegate 中,您可以通过函数调整单元格高度
,之后为了反映视图中的变化,您需要重新加载表格
,如果表格中有部分,那么您不需要重新加载整个表格并避免视图中的闪烁,您只需重新加载该部分您通过该单元格的索引路径执行高度更改的表格的特定部分您还可以使用其他方式来查找所需的单元格,这是我查找需要重新加载的单元格的风格
in UITableViewDelegate you can resize your cell height by function
and after that for reflecting the change in view you need to reload table by
and if you have section in your table then you need not to reload whole table and avoid flickering in view you just reload that specific section of table for which you perform change in height by indexpath of that cell you can also use some other way to find the desired cell here is my style to find the cell which i need to reload
老问题,但如果仍在寻找这个问题的答案,一些自动布局魔法可能会对某人有所帮助。
如果一切设置正确(自动布局约束),您不必自己计算任何内容。
您所要做的就是禁用 UITextView 的滚动启用属性,然后在 textViewDidChange 上调用 tableView.beginUpdates() 和 tableView.endUpdates() 。
有关详细说明,请查看
Old question but some Auto Layout magic might help someone if still looking for the answer to this.
If everything is set up properly (Auto Layout constraints) you do not have to calculate anything yourself.
All you have to do is disable UITextView's scrolling enabled property then on textViewDidChange call tableView.beginUpdates() and tableView.endUpdates().
For a detailed explanation, check out a post I wrote which also includes a working sample project.
您只能通过实现其
委托
来增加自定义UITableViewCell
的高度heightForRowAtIndexPath:
当 cell 的 textView 大于 cell height 时,需要调用
UITableView
上的reloadData
方法实例和heightForRowAtIndexPath:
函数必须返回扩展单元格的正确高度。You can only increase the height of custom
UITableViewCell
by implementation it'sdelegate
heightForRowAtIndexPath:
When cell's textView grow bigger then cell height , you need to call
reloadData
method onUITableView
instance andheightForRowAtIndexPath:
function must return the correct height for the extended cell.UITableViewDelegate
协议定义:它允许您指定每个单元格的高度。
UITextView
将为每个可见单元格调用数据源。您可以通过调用UITableView
的reloadData
来触发此操作The
UITableViewDelegate
protocol defines:Which allows you to specify the heigh of each cell. The
UITextView
will call the data source for every visible cell. You can trigger this by callingUITableView
'sreloadData