以编程方式添加约束反向工作

Pogramatically added constraint works in reverse

添加以下底部约束并将常量设置为 -100 似乎与我在 Storyboard 的约束中添加该常量时完全相反。

具体来说,这会将视图推到控制器底部上方 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

    }

感谢您抽出宝贵时间。

始终取决于参与观点/主播的顺序。在设置约束时切换 parentController.view.bottomAnchorself.bottomAnchor 就可以了(因为你想要实现的是 parentController 的视图底部等于视图的底部减 100 分)。

self.pullUpViewBottomCSTR = parentController.view.bottomAnchor.constraint(equalTo: self.bottomAnchor)

您可以在创建约束时立即设置常量 btw:

self.pullUpViewBottomCSTR = parentController.view.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: -100)

我总是感到困惑,我是否在编写约束时交换视图是否重要。答案是,有时重要,有时不重要。

总的来说:

假设您有 ViewA 和 ViewB,并使用 0 在它们之间设置约束。它们粘在一起。对于这种情况,约束视图的顺序无关紧要。

ViewA & ViewB,你用20在它们之间设置了约束。它们不是粘在一起的。他们之间有一些space。你是想让ViewA站稳而move/pushViewB还是想让ViewB站稳让ViewA动起来?因此,向其添加约束很重要。

如果它第一次不起作用,那么我只需切换约束并将其添加到另一个视图,然后它就可以正常工作了。