更新单元格子视图的约束

Posted

技术标签:

【中文标题】更新单元格子视图的约束【英文标题】:Update Constraints of Cell Subview 【发布时间】:2015-07-06 06:43:39 【问题描述】:

我有一个自定义单元格,我正在尝试更新子视图的约束,如下所示:

CustomeCell.m

-(void)layoutSubviews

    [super layoutSubviews];

    _con_view_width.constant = _lbl_property.frame.size.width;
    if(!_btn_imageCount.isHidden)
    _con_view_width.constant = _lbl_property.frame.size.width + _btn_imageCount.frame.size.width;

    NSLog(@"%@",NSStringFromCGRect(_view_lbl_btn.frame));

    [_view_lbl_btn updateConstraintsIfNeeded];
    NSLog(@"%@",NSStringFromCGRect(_view_lbl_btn.frame));


问题 约束仅在滚动时重新加载行后才起作用

【问题讨论】:

尝试使用动画块来做到这一点。看这里:***.com/a/32134857/3718570 【参考方案1】:

而不是 updateConstraintsIfNeeded 尝试 layoutIfNeeded。我认为它会起作用,你的代码应该是这样的。

-(void)layoutSubviews

    [super layoutSubviews];

    _con_view_width.constant = _lbl_property.frame.size.width;
    if(!_btn_imageCount.isHidden)
    _con_view_width.constant = _lbl_property.frame.size.width + _btn_imageCount.frame.size.width;

    NSLog(@"%@",NSStringFromCGRect(_view_lbl_btn.frame));

    [_view_lbl_btn layoutIfNeeded];
    NSLog(@"%@",NSStringFromCGRect(_view_lbl_btn.frame));


编辑:如果您在自定义单元格类中执行此操作,那么您需要在单元格中再添加一行以在索引路径处添加一行。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
    //[cell layoutIfNeeded];
    [cell layoutSubviews];
    return cell;

【讨论】:

您是在表格视图单元格的自定义类中执行此操作吗? 然后在单元格内索引路径处的行..就像这样初始化单元格后写入。 [单元格布局IfNeeded]; 我现在会得到正确的框架,但屏幕上的 UI 没有更新。 然后尝试 [cell layoutSubViews];。我也遇到过这种问题。这两个选项之一必须有效。 @MaheshAgrawal 你有没有找到解决这个问题的方法?我遇到了同样的问题。【参考方案2】:

尝试更新数据源委托中用于将单元格返回到 tableview 的方法中的约束,而不是单元格中的方法 layoutSubviews。

并在更新约束之前调用cell.contentView.layoutIfNeeded(),这会将单元格设置为默认宽度和高度(320、44 基于设备),以防您可以获得宽度。委托将单元格返回到 tableview 之后。如果您设置了一些直接或相对改变大小的约束,则单元格大小将由 tableview 更新(框架会为您更新)。

【讨论】:

以上是关于更新单元格子视图的约束的主要内容,如果未能解决你的问题,请参考以下文章

更新图像高度约束后更新表格视图单元格高度

如何在图像下载和高度约束迅速改变后更新表格视图单元格高度?

UITableview 单元格子视图的高度比单元格大

UICollectionView 单元格子视图不调整大小

使用自动布局约束动态调整表格视图单元格的大小

iOS Update Interface Builder视图框架基于约束