以编程方式添加的约束反向工作
Posted
技术标签:
【中文标题】以编程方式添加的约束反向工作【英文标题】:Pogramatically added constraint works in reverse 【发布时间】:2017-09-01 14:52:31 【问题描述】:添加以下底部约束并将常量设置为 -100 似乎与我在情节提要的约束中添加该常量时完全相反。
具体来说,这会将视图推到控制器底部上方 100 个单位,而预期的行为是使其降低 100 个单位。我很可能犯了一个非常愚蠢的错误,但我现在看不到它。
func setUp(parentController: UIViewController)
self.parentController = parentController;
self.translatesAutoresizingMaskIntoConstraints = false
self.leftAnchor.constraint(equalTo: parentController.view.leftAnchor).isActive = true
self.rightAnchor.constraint(equalTo: parentController.view.rightAnchor).isActive = true
self.heightAnchor.constraint(equalToConstant: pullUpViewHeight).isActive = true
self.pullUpViewBottomCSTR = self.bottomAnchor.constraint(equalTo: parentController.view.bottomAnchor)
self.pullUpViewBottomCSTR!.isActive = true;
self.pullUpViewBottomCSTR!.constant = -100
感谢您抽出宝贵时间。
【问题讨论】:
a-b
和 b-a
是彼此的加法倒数。
【参考方案1】:
它始终取决于参与视图/主播的顺序。在设置约束时切换parentController.view.bottomAnchor
和self.bottomAnchor
,一切顺利(因为您想要实现的是parentController
的视图底部等于视图底部减去100 点)。
self.pullUpViewBottomCSTR = parentController.view.bottomAnchor.constraint(equalTo: self.bottomAnchor)
顺便说一句,您可以在创建约束时立即设置常量:
self.pullUpViewBottomCSTR = parentController.view.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: -100)
【讨论】:
【参考方案2】:当我在编写约束时交换视图是否重要,这总是让我感到困惑。答案是,有时重要,有时不重要。
一般:
假设您有 ViewA 和 ViewB,并使用 0
在它们之间设置约束。它们粘在一起。在这种情况下,约束视图的顺序无关紧要。
ViewA 和 ViewB,您使用 20
在它们之间设置约束。它们没有粘在一起。它们之间有一些空格。您希望 ViewA 站稳并移动/推动 ViewB,还是希望 ViewB 站稳并让 ViewA 移动?因此,将约束添加到哪个位置很重要。
如果第一次不起作用,那么我只需切换约束并将其添加到另一个视图中,然后它就可以正常工作了。
【讨论】:
实际上,您并没有将约束添加到参与视图之一,而是它们的共同祖先。 正确,但如何将两个子视图相互约束仍然很重要。以上是关于以编程方式添加的约束反向工作的主要内容,如果未能解决你的问题,请参考以下文章