一个单元格(UITableView)可以实时改变它的高度吗?
Posted
技术标签:
【中文标题】一个单元格(UITableView)可以实时改变它的高度吗?【英文标题】:Can a cell (UITableView) change its height in real time? 【发布时间】:2016-02-24 09:41:02 【问题描述】:我有一个带有标签的单元格,有时标签文本会发生变化,单元格应该扩大一点。我正在使用自动布局和可变高度单元格(你知道,UITableViewAutomaticDimension 和estimatedRowHeight)。除非在修改标签后我调用 reloadData 或重新加载该特定单元格,否则它似乎不起作用。 这正常吗?有什么方法可以自动执行此操作,或者不必使用视图控制器重新加载现在应该有另一个高度的单元格?谢谢。
【问题讨论】:
正常,计算单元格框内文字所占空间,将该值设置为变量,然后将该变量传递给:(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
问题是,只需调用 reloadData 或 reloadRowsAtIndexPaths 就可以了,无需手动计算任何高度(因为我使用自动布局)。我的问题是是否可以自动完成,或者我必须始终手动重新加载。
好的,尝试调用[tableView beginUpdates] [tableView endUpdates]
这应该会根据其约束和新文本更改重新加载单元格框架
【参考方案1】:
我在我的一个应用程序中遇到了类似的问题,我所做的是 添加2个约束,设d为标签的默认高度 1.标签高度>=d,优先级=750 2.高度=d,优先级=1000 和 uitableview 单元格属性到 UITableViewAutomaticDimension 这对我有用。
【讨论】:
【参考方案2】:try this one
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
if ([[[arrFeed objectAtIndex:indexPath.section] objectForKey:@"post_keywords"] isEqualToString:@""])
int heigthHeading = [self getHeightForText:[[arrFeed objectAtIndex:indexPath.section] objectForKey:@"post_heading"] withFont:[UIFont systemFontOfSize:17.0] andWidth:245.0];
return 25+heigthHeading;
else
int heigthHeading = [self getHeightForText:[[arrFeed objectAtIndex:indexPath.section] objectForKey:@"post_heading"] withFont:[UIFont systemFontOfSize:17.0] andWidth:245.0];
return 25+heigthHeading;
【讨论】:
【参考方案3】:使单元格高度动态化(您也可以像这样在同一个单元格上添加多个标签并且您的单元格增加的高度取决于标签文本)
为标签添加四个约束(顶部、底部、前导、尾随)
设置第0行数和换行模式自动换行
添加这两个委托方法
-(CGFloat)tableView:(UITableView )tableView estimatedHeightForRowAtIndexPath:(NSIndexPath )indexPath
return 44;
-(CGFloat)tableView:(UITableView )tableView heightForRowAtIndexPath:(NSIndexPath )indexPath
return UITableViewAutomaticDimension;
【讨论】:
***.com/questions/35789560/…以上是关于一个单元格(UITableView)可以实时改变它的高度吗?的主要内容,如果未能解决你的问题,请参考以下文章
UITableview单元格图像中的uiimageview中的UIButton没有改变
如何在没有重载数据的情况下更改uitableview中的高度单元格