繁体   English   中英

使用Masonry将自动布局约束添加到视图的子视图

[英]Adding auto-layout constraints to subviews of a view with Masonry

我正在使用Masonry iOS库来简化围绕iOS自动布局的一些逻辑,并且到目前为止我都喜欢它。 不过,就在最近,我正在开发一个更复杂的应用程序,并试图将自动布局约束添加到与其父视图相关的子视图中。 然而,这样做似乎迫使父母的观点接受其子女的约束。 可能是我还没有完全了解自动布局继承的这一方面,但这是一个简单的示例:

UIView *test = UIView.new;
[test setBackgroundColor:[UIColor orangeColor]];
[self.view addSubview:test];
[test makeConstraints:^(MASConstraintMaker *make) {
    make.edges.equalTo(self.view).with.insets(UIEdgeInsetsMake(10, 10, 10, 10));
}];

UIView *test2 = UIView.new;
[test2 setBackgroundColor:[UIColor redColor]];
[test addSubview:test2];
[test2 makeConstraints:^(MASConstraintMaker *make) {
    make.edges.equalTo(test).with.insets(UIEdgeInsetsMake(5, 5, 5, 5));
    make.centerX.equalTo(test);
}];

在此示例中,尽管第二个UIView(test2)是test的子视图,并且其边缘设置为与test相匹配,但是当运行此代码时,“ test”视图仍应推向与屏幕齐平的位置。 奇怪的是,顶部和底部似乎尊重“测试”视图的边缘插入,并且它们可以准确地定位自己,但是“视图”的右侧边缘现在位于20点插入位置(因为左侧被拉到与左侧齐平)。

现在,如果我更改test2并将其设置为self.view的子视图而不是 test的子视图,则约束突然可以正常工作。

这是当test2是测试的子视图时发生的情况的可视化图片:

一切都被冲走了

这似乎暗示您只能将相关约束添加到同一父视图的子视图。 我知道情况并非如此,但是尽管尝试了各种不同的方法,但我似乎无法阻止更深层次的子视图影响他们的父母。

以我为例,问题的原因是对视图控制器的基本视图施加了约束。 该限制原本只是想将基本视图定位在全宽和全高,但实际上是在设置宽度,高度和顶部位置,但没有设置左侧位置。

保持左侧位置不受任何约束会导致将来的子视图(其自身包含左约束)将父视图推向四周以符合子视图约束。

这里的课程:从视图堆栈的非常开头开始,并在假设问题出在子视图之前,先验证每个子视图。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM