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

时间:2017-09-01 14:52:32

标签: ios autolayout nslayoutconstraint ios-autolayout

添加以下底部约束并将常量设置为-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

    }

感谢您抽出宝贵时间。

2 个答案:

答案 0 :(得分:1)

它总是取决于参与的视图'/锚'的顺序。在设置约束时切换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)

答案 1 :(得分:0)

如果我在写约束时交换视图,那总是让我感到困惑。答案是,有时它很重要,有时它并不重要。

一般来说:

想象一下,你有ViewA& ViewB,您可以使用 0 在它们之间设置约束。它们粘在一起。对于这种情况,约束视图的顺序并不重要。

ViewA& ViewB,您可以使用 20 在它们之间设置约束。他们粘在一起。它们之间有一些空间。您是否希望ViewA站稳并移动/推动ViewB,或者您希望ViewB站稳脚跟并使ViewA移动?因此,您需要将约束添加到其中。

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