Jon*_*nas 6 uitableview ios autolayout
编辑:我解决了我的问题,但我有兴趣了解为什么我的修复工作.见下文.
我使用autolayout来构建我UITableViewCell的.
单元格非常简单,有2个标签(紫色和黄色)和文本字段(绿色).

这在第一次显示时工作正常.但是当我推动一个新的视图控制器时,视图会立即重新排列.无论出于何种原因,紫色标签都会变大.
这是一个示例,我单击"父帐户ID"单元格以推送新的视图控制器.请注意,一旦转换开始,布局就会发生变化.当我回来时它仍然改变了.

这些项目是在[UILabel new]没有框架的情况下创建的.
[self.contentView addSubview:self.textLabel];
[self.contentView addSubview:self.errorLabel];
[self.contentView addSubview:self.textField];
Run Code Online (Sandbox Code Playgroud)
然后使用Masonry创建自动布局.
UIEdgeInsets insets = UIEdgeInsetsMake(3, 15, 3, 15);
[self.textLabel makeConstraints:^(MASConstraintMaker *make) {
make.left.top.equalTo(self.contentView).insets(insets);
make.width.priorityLow();
}];
[self.errorLabel makeConstraints:^(MASConstraintMaker *make) {
make.top.right.equalTo(self.contentView).insets(insets);
make.left.equalTo(self.textLabel.right).offset(5);
}];
[self.textField makeConstraints:^(MASConstraintMaker *make) {
make.left.bottom.right.equalTo(self.contentView).insets(insets);
make.top.equalTo(self.textLabel.bottom).insets(insets);
}];
Run Code Online (Sandbox Code Playgroud)
请注意,我从未指定高度,因为我并不关心高度.(只要它是一致的!)
知道为什么这会改变吗?谢谢
我现在还设置了autolayout属性contentView.
[self.contentView makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self);
}];
Run Code Online (Sandbox Code Playgroud)
我仍然有兴趣了解为什么contentView改变它的大小!
您的修复之所以有效,是因为它强制执行了缺失的约束。
首先,让我们首先写下您使用 Masonry 创建的约束:
这可能看起来很完整,但它允许自动布局以多种不同的方式绘制您的视图。
考虑以下:



根据您上面创建的规则,所有三种可能性都是正确的。当您点击单元格时,布局将失效并重新绘制。鉴于您的单元格可以通过几种不同的方式绘制,它会简单地绘制自身并满足您的所有约束......并且确实如此。
老实说,我不能 100% 确定make.edges.equalTo(self);到底是什么,因为它有点模糊。然而,可以肯定的是,它增加了您正在寻找的缺失约束。
可能缺少的约束是:
希望这能为您澄清。
| 归档时间: |
|
| 查看次数: |
475 次 |
| 最近记录: |