为什么我使用Autolayout约束编程中心不起作用?

时间:2015-12-08 16:08:47

标签: ios swift autolayout ios-autolayout

我尝试以编程方式简单地将GridViewAutolayout约束对齐。建议的答案herehere建议使用

NSLayoutConstraint(item: self.view, attribute: NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Equal,
            toItem: self.gridView, attribute: NSLayoutAttribute.CenterX, multiplier: 1, constant:0)

我正在添加这样的约束:

func setupConstraints() {

    let centerX = NSLayoutConstraint(item: self.view, attribute: NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Equal,
        toItem: self.gridView, attribute: NSLayoutAttribute.CenterX, multiplier: 1, constant:0)

    let centerY = NSLayoutConstraint(item: self.view, attribute: NSLayoutAttribute.CenterY, relatedBy: NSLayoutRelation.Equal,
        toItem: self.gridView, attribute: NSLayoutAttribute.CenterY, multiplier: 1, constant:0)

    self.view.addConstraints([centerX, centerY])
}

但是,这对我来说似乎不起作用。运行应用程序时,视图位于左上角,控制台显示有关同时满足约束的问题的疯狂输出。

enter image description here

2 个答案:

答案 0 :(得分:3)

这应该有效:

func setupConstraints() {

    self.viewToCenter.translatesAutoresizingMaskIntoConstraints = false
    NSLayoutConstraint(item: self.viewToCenter, attribute: NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Equal,
        toItem: self.view, attribute: NSLayoutAttribute.CenterX, multiplier: 1, constant:0).active = true

    NSLayoutConstraint(item: self.viewToCenter, attribute: NSLayoutAttribute.CenterY, relatedBy: NSLayoutRelation.Equal,
        toItem: self.view, attribute: NSLayoutAttribute.CenterY, multiplier: 1, constant:0).active = true
}

您的第一项和第二项错误,并且不使用addConstraints,因为它已经或将被弃用(iOS <= 8)。

答案 1 :(得分:1)

我认为您不添加此代码

self.gridView.translatesAutoresizingMaskIntoConstraints = false