Ios 推送新视图控制器时,自动布局高度会更改

Ios 推送新视图控制器时,自动布局高度会更改,ios,uitableview,autolayout,Ios,Uitableview,Autolayout,编辑:我修复了我的问题,但我有兴趣了解我的修复为何有效。见下文 我使用autolayout构建我的UITableViewCells 单元格非常简单,有两个标签(紫色和黄色)和一个文本字段(绿色) 这在第一次显示时工作正常。但当我按下一个新的视图控制器时,视图会立即重新排列自己。无论什么原因,紫色标签都会变大 下面是一个示例,我单击“父帐户ID”单元格以推送一个新的视图控制器。请注意,转换一开始,布局就发生变化。当我回来时,它仍然是变化的 项目是使用无框架的[UILabel new]创建的 [

编辑:我修复了我的问题,但我有兴趣了解我的修复为何有效。见下文

我使用autolayout构建我的
UITableViewCell
s

单元格非常简单,有两个标签(紫色和黄色)和一个文本字段(绿色)

这在第一次显示时工作正常。但当我按下一个新的视图控制器时,视图会立即重新排列自己。无论什么原因,紫色标签都会变大

下面是一个示例,我单击“父帐户ID”单元格以推送一个新的视图控制器。请注意,转换一开始,布局就发生变化。当我回来时,它仍然是变化的

项目是使用无框架的
[UILabel new]
创建的

[self.contentView addSubview:self.textLabel];
[self.contentView addSubview:self.errorLabel];
[self.contentView addSubview:self.textField];
然后使用创建自动布局

请注意,我从未指定高度,因为我并不真正关心高度。(只要是一致的!)

你知道为什么这会改变吗?谢谢

编辑:我找到了一个解决方案。 我现在还设置了
contentView
的自动布局属性

[self.contentView makeConstraints:^(MASConstraintMaker *make) {
    make.edges.equalTo(self);
}];

我仍然有兴趣了解
contentView
更改大小的原因

您的修复程序之所以有效,是因为它强制执行了一个缺少的约束

首先,让我们先写下使用砌体创建的约束:

  • 紫色视图必须左对齐
  • 紫色视图必须与顶部对齐
  • 紫色视图的宽度可以变化,但它的最小值和最大值并不重要
  • 黄色视图必须右对齐
  • 黄色视图必须与顶部对齐
  • 黄色视图的左边缘必须距离紫色视图的右边缘5px
  • 绿色视图必须左对齐
  • 绿色视图必须与底部对齐
  • 绿色视图必须右对齐
  • 绿色视图的上边缘必须距离紫色视图的下边缘0px
  • 这可能看起来很完整,但它允许autolayout以多种不同的方式绘制视图

    考虑以下几点:


    根据您在上面创建的规则,这三种可能性都是正确的。 点击单元格时,布局将无效并重新绘制。考虑到你的单元格可以用几种不同的方式绘制,它只需绘制自己并满足你所有的约束条件。。。确实如此

    老实说,我不是100%确定是什么
    make.edges.equalTo(self)
    确实如此,因为它有点模棱两可。然而,有一点是肯定的,那就是它添加了您所寻找的缺少的约束

    可能缺少的约束条件包括:

  • 紫色视图的高度必须等于绿色视图的高度
  • 黄色视图的高度必须等于紫色视图的高度
  • 绿色视图的高度必须等于黄色视图的高度

  • 希望这能为您澄清这一点。

    当您第二次推送和弹出时会发生什么?一旦它变大,它将保持较大。我也有同样的问题,但不幸的是,您的解决方案对我不起作用。我遇到了同样的问题,但您的解决方案没有帮助。
    [self.contentView makeConstraints:^(MASConstraintMaker *make) {
        make.edges.equalTo(self);
    }];