尝试以编程方式实现约束时忽略了约束

时间:2017-07-02 07:31:59

标签: ios swift autolayout constraints

我试图将logoImage横向居中放置。通过设置约束垂直,但在测试时,它显示在(x:0, y:0)上。 知道如何解决这个问题吗? 感谢

var movieView : UIView?
let logoImage = UIImageView(image: #imageLiteral(resourceName: "my_logo"))

// This function runs in viewWillAppear
internal func setupIntroMovie() {
    movieView = UIView(frame: view.frame)
    view.addSubview(movieView!)
    view.addSubview(logoImage)

    let horizontalConstraint = NSLayoutConstraint(item: logoImage,
                                                  attribute: .centerX,
                                                  relatedBy: .equal,
                                                  toItem: view,
                                                  attribute: .centerX,
                                                  multiplier: 1,
                                                  constant: 0)
    let verticalConstraint = NSLayoutConstraint(item: logoImage,
                                                attribute: .centerY,
                                                relatedBy: .equal,
                                                toItem: view,
                                                attribute: .centerY,
                                                multiplier: 1,
                                                constant: 0)
    view.addConstraints([horizontalConstraint,
                              verticalConstraint])
    updateViewConstraints()
}

1 个答案:

答案 0 :(得分:1)

您需要设置logoImage.translatesAutoresizingMaskIntoConstraints = false,因为它确定视图的自动调整遮罩是否已转换为自动布局约束。

internal func setupIntroMovie() {
        movieView = UIView(frame: view.frame)
        view.addSubview(movieView!)
        view.addSubview(logoImage)

        let horizontalConstraint = NSLayoutConstraint(item: logoImage,
                                                      attribute: .centerX,
                                                      relatedBy: .equal,
                                                      toItem: view,
                                                      attribute: .centerX,
                                                      multiplier: 1,
                                                      constant: 0)
        let verticalConstraint = NSLayoutConstraint(item: logoImage,
                                                    attribute: .centerY,
                                                    relatedBy: .equal,
                                                    toItem: view,
                                                    attribute: .centerY,
                                                    multiplier: 1,
                                                    constant: 0)
        // Update 
        logoImage.translatesAutoresizingMaskIntoConstraints = false

        view.addConstraints([horizontalConstraint,
                             verticalConstraint])
        updateViewConstraints()
    }
  

如果此属性的值为true,则系统会创建一组   复制视图指定的行为的约束   自动化面具。这也允许您修改视图的大小和   使用视图的框架,边界或中心属性的位置,   允许您在Auto中创建静态的基于框架的布局   布局。