在下面的图片中,他们有这些约束:
我对约束4-7是如何工作的感到困惑。该方法声称它在运行时根据最高的控件(高度)动态设置控件(名称、标签和名称文本视图)的垂直间距。因此,如果标签的固有高度为48 (由于增加了字体),则文本视图的高度也将以某种方式与名称标签的高度相匹配。我在代码中看不到这种关系,比如:nameTextView.height = nameLabel.height + 0
同样在约束4中,它说它可以是>=,但在约束5中,它说它必须等于(优先级较低)。系统如何决定在什么时间使用哪个约束?
发布于 2017-07-17 10:00:20
约束5和7用于定义接口的默认值,因为约束4和6是不等式,并接受多种可能性。
在这个例子中,他们从来没有说过nameTextView
和nameLabel
必须是相同的高度。这四个约束实际上照顾到了它们不同的高度。
下面是它们的工作原理:
约束4和6分别定义了从nameLabel
到nameTextView
的距离(注意这个术语)可以等于或大于20。因此,如果只设置这两个,那么如果它们实际上大于或等于,Xcode就会丢失,这就是为什么你需要有低优先级约束(5和7),它们给Xcode提供了指导,在低优先级时,它们都将从20“开始”,然后程序通过检查谁更高(因为4和6允许20或更高)来尝试满足4和6:nameLabel
或nameTextView
。如果nameLabel
更高,则通过将其垂直距离设置为20来满足约束4,并通过将nameTextView
到顶部的垂直距离设置为大于20 (通过高度之差自动计算)来满足约束6。现在,一切都满足了,自动布局将会成功!
希望这能有所帮助。
https://stackoverflow.com/questions/45134920
复制相似问题