的UITableView与rowHeight的UITableViewAutomaticDImension当我改变

问题描述:

我有固定于底部的描述标签一个UITableViewCell如下所示的行数不更新0的UITableView与rowHeight的UITableViewAutomaticDImension当我改变

- (void)awakeFromNib { 
    [super awakeFromNib]; 
    [self setupView]; 
} 

-(void) setupView 
{ 

    UITapGestureRecognizer * gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(toggleNumberOfLines)]; 
    self.jobDescriptionLabel.userInteractionEnabled = YES; 
    [self.jobDescriptionLabel addGestureRecognizer:gestureRecognizer]; 
} 

- (void) toggleNumberOfLines { 
    if(self.jobDescriptionLabel.numberOfLines != 0){ 
     self.jobDescriptionLabel.numberOfLines = 0; 
    }else{ 
     self.jobDescriptionLabel.numberOfLines = kNumberOfLines; 
    } 
    [self.jobDescriptionLabel sizeToFit]; 
    [self layoutIfNeeded]; 
} 

当我在标签上点击,行数不改变,但细胞不展开,以适应线路的新号码。我该如何解决?

折叠(默认):

enter image description here

扩展:

enter image description here

+0

仍无法了解你的实际问题。问题是与标签或扩大tableView? –

+0

'UITableViewAutomaticDimension'根据其内容自动计算单元格的高度。在我的情况下,我正在更新标签的高度,但tableview不会更新单元格的高度。如何获取桌面视图以更新单元格的高度 –

+0

您需要强制重新加载表格。首先'HeightOfRow'方法将会调用'cellForRow'。所以当调用'HeightOfRow'方法时,确保你有一个新的标签高度。并请添加您的代码工作完成这一点。 –

如果您在限制设置正确,你需要重新加载数据---不整表,甚至没有受影响的行。

最好的方法是后面加个委托功能到你的tableview控制器,并调用这些行背到后面:

tableView.beginUpdates() 
tablebleView.endUpdates() 

,将告诉自动布局重新计算的行高度。

编辑:检查我的回答 - 其中包括一个链接到一个演示项目 - 在这里:Expand UILabel inside UITableView with "more" button like Instagram

+0

非常好!简直太棒了!非常感谢 –

当细胞勾画出它的子视图,表视图实际上并没有知道事情的任何方式已经改变。您必须手动告诉表视图重新计算。

你可能要重新加载表视图,或至少细胞的变化在发生。

reloadData看看重新加载整个表视图,或者reloadRowsAtIndexPaths:如果你只想重装具体指标在Apple reference docs

+0

这种方法的问题是,当我调用reloadRowsAtIndexPaths时,它会重新创建单元格。这意味着我需要在我的'UIViewController'中存储'jobDescriptionExpanded'状态并在单元格创建时传递它。虽然这可行,但并不完全优雅 –

+0

为什么不使用“UITableViewCell”的选定状态来决定“jobDescriptionExpanded”的值? 不幸的是,让'UITableView'更新单元格高度的唯一方法是重新加载单元格。所以不管你觉得你的解决方案多么'不雅',你必须这样做。 –

您可以更新heightForRowAtindexPath中的tableview单元格高度。 调用reloadRowsAtIndexPath更新UITableView的单行的方法。

self.dataTableView.beginUpdates() 
self.dataTableView.reloadRows(at: [IndexPath(row: 0, section: 0)], with: UITableViewRowAnimation.automatic) 
self.dataTableView.endUpdates()