2017-06-19 137 views
1

我以編程方式創建了一個帶約束的按鈕。但按鈕移動到錯誤的位置(右下角)。我錯了什麼?以編程方式創建約束不起作用

item = UIButton(type: .custom) 
    item.setImage(image, for: .normal) 
    item.addTarget(self, action: #selector(PlayController.itemAct(sender:)), for: .touchUpInside) 
    item.translatesAutoresizingMaskIntoConstraints = false 
    view.addSubview(item) 

    // Constraints 
    item.widthAnchor.constraint(equalToConstant: 30).isActive = true 
    item.heightAnchor.constraint(equalToConstant: 30).isActive = true 
    item.topAnchor.constraint(equalTo: view.topAnchor, constant: 441).isActive = true 
    item.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 123).isActive = true 
    item.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: 222).isActive = true 
    item.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 196).isActive = true 

編輯:

如果你想創建左,右,上,下,你應該設置負值到item.trailingAnchoritem.bottomAnchor,對我的作品。

+1

你完全約束它,一個。設置寬度和高度後,設置頂部和主要限制就足夠了。不要從左側和右側限制它,並且在設置寬度和高度時不要從頂部和底部限制它。 – vacawama

+0

好的,謝謝。 – Sebastian

回答

0

下面是一些我的代碼通過約束的例子,因爲有很多不同的方法。這裏是我更喜歡的方式之一:

containerView.addConstraints([ 
     NSLayoutConstraint(item: view, attribute: NSLayoutAttribute.left, relatedBy: NSLayoutRelation.equal, toItem: containerView, attribute: NSLayoutAttribute.left, multiplier: 1, constant: 0), 
     NSLayoutConstraint(item: view, attribute: NSLayoutAttribute.top, relatedBy: NSLayoutRelation.equal, toItem: containerView, attribute: NSLayoutAttribute.top, multiplier: 1, constant: 0), 
     NSLayoutConstraint(item: view, attribute: NSLayoutAttribute.bottom, relatedBy: NSLayoutRelation.equal, toItem: containerView, attribute: NSLayoutAttribute.bottom, multiplier: 1, constant: 0), 
     NSLayoutConstraint(item: view, attribute: NSLayoutAttribute.right, relatedBy: NSLayoutRelation.equal, toItem: containerView, attribute: NSLayoutAttribute.right, multiplier: 1, constant: 0) 
     ]) 

請確保您添加的約束到容器視圖

還要注意的是,如果你做到這一點喜歡你的,你只是想添加的頂部/左/右/底部或頂部/左/寬/高。你最多隻需要4個(通常)

相關問題