Swift Programatic约束view.bottomAnchor导致问题

时间:2017-04-21 07:57:26

标签: swift

我正试图在所有程序性约束条件下变得更好。

我创建了一个界面表示我想做的事情,以确保一切都变成蓝色并且在运行时没有出错。

在界面构建器中,我创建了一个UIView,将比率设置为1:1,顶部锚点100和底部锚点450,并对其进行水平约束。

效果很好。

现在我删除了所有这些并通过代码

完成

我认为这应该与IB版本相同......

let testView = UIView()

view.addSubview(testView)
        testView.backgroundColor = .red


        let testViewTopConstraint = testView.topAnchor.constraint(equalTo: view.topAnchor, constant: 100)
        let testViewBottomConstraint = testView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 450)
        let testViewCenterXConstraint = testView.centerXAnchor.constraint(equalTo: view.centerXAnchor)
        let testViewAspectConstraint = NSLayoutConstraint(item: testView,
                                                          attribute: .height,
                                                          relatedBy: .equal,
                                                          toItem: testView,
                                                          attribute: .width,
                                                          multiplier: (1.0 / 1.0),
                                                          constant: 0)


        NSLayoutConstraint.activate([testViewTopConstraint, testViewBottomConstraint, testViewCenterXConstraint, testViewAspectConstraint])

        testView.translatesAutoresizingMaskIntoConstraints = false

当我运行它时,红色方块变成一个延伸到末端的矩形(可能超出)。

我玩过编程限制。如果我要添加一个主要约束我完全没问题,它似乎是我的底线约束总是让我感到困惑。

我的底部约束有什么问题? 或者我做错了什么?

1 个答案:

答案 0 :(得分:1)

有一些事情,但要在这里回答你的特定问题,你只需要添加一个 - 到450常量

let testViewBottomConstraint = testView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -450)

您还可以通过添加更多锚点来省略NSLayoutConstraint。