【问题标题】:view's frame don't change视图的框架不会改变
【发布时间】:2019-04-30 08:07:45
【问题描述】:

我有一个表格视图。当重新加载数据时,我将配置单元格和更新约束。在调用该单元格的layoutSubviews 之后,无法更新视图的框架

- (void)configModel:(LKSportActivityEventModel *)model {
 //some code before
   CGFloat titleWidth = 100;
   [self.activityNameView mas_updateConstraints:^(MASConstraintMaker *make) {
        make.width.mas_equalTo(titleWidth);
    }];
 //some code after
}
- (void)layoutSubviews {
    [super layoutSubviews];
    [self setCorner:UIRectCornerBottomRight | UIRectCornerTopLeft
             bounds:self.activityNameView.bounds
         cornerSize:CGSizeMake(4, 4)
         targetView:self.activityNameView
              layer:self.activityNameViewShapLayer];
}

activityNameView 的边界不会改变

【问题讨论】:

  • mas_updateConstraints 仅在您更改约束的常量时才有效,您是否有 Masonry 可以更新的宽度约束?第二部分代码的目的是什么?你这里有事吗?
  • @LorenzOliveto 在向 activityNameView 添加掩码之前获取边界

标签: ios autolayout masonry


【解决方案1】:

默认实现使用您设置的任何约束来确定任何子视图的大小和位置。

layoutSubviews 只计算其子视图的大小和位置。它不会布置整个视图子树。

UITableViewCell.layoutSubviews之后,只有content view的框架是对的。

修复布局的更简单方法是在layoutSubviews 中调用contentView.layoutIfNeeded

【讨论】:

    猜你喜欢
    • 2019-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多