當我嘗試手動設置我的IBOutlet
的約束時,我遇到了NSLayoutConstraint
衝突。從本質上講,我只是在故事板上放置觀點,以獲得他們如何看待的一般意義,然後創建IBOutlet
來引用它們。但是,所有的約束都在代碼中添加:IBOutlets約束衝突
class LoginViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var view1: UIView!
@IBOutlet weak var view2: UView2!
@IBOutlet weak var name: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
view2.addSubview(name)
//add constraints
NSLayoutConstraint(item: view1, attribute: .CenterX, relatedBy: .Equal, toItem: self.view, attribute: .CenterX, multiplier: 1, constant: 0).active = true
NSLayoutConstraint(item: view1, attribute: .CenterY, relatedBy: .Equal, toItem: self.view, attribute: .CenterY, multiplier: 1, constant: -self.view.frame.height * 0.07).active = true
NSLayoutConstraint(item: view1, attribute: .Width, relatedBy: .Equal, toItem: self.view, attribute: .Width, multiplier: 0.8, constant: 0).active = true
NSLayoutConstraint(item: view1, attribute: .Height, relatedBy: .Equal, toItem: self.view, attribute: .Height, multiplier: 0.4, constant: 0).active = true
NSLayoutConstraint(item: view2, attribute: .Width, relatedBy: .Equal, toItem: view1, attribute: .Width, multiplier: 1, constant: 0).active = true
NSLayoutConstraint(item: view2, attribute: .CenterX, relatedBy: .Equal, toItem: view1, attribute: .CenterX, multiplier: 1, constant: 0).active = true
NSLayoutConstraint(item: view2, attribute: .Top, relatedBy: .Equal, toItem: view1, attribute: .Bottom, multiplier: 1, constant: self.view.frame.height * 0.01).active = true
NSLayoutConstraint(item: view2, attribute: .Height, relatedBy: .Equal, toItem: self.view, attribute: .Height, multiplier: 0.1, constant: 0).active = true
}
}
的NSLayoutConstraint
矛盾就會消失時,我只是在代碼中創建視圖,即var view2 = UIView()
或者如果我註釋掉view2
的約束。我不明白。
編輯:基於日誌,對於view2
,問題似乎爲NSIBPrototypingLayoutConstraint
和UIView-Encapsulated-Layout-Height'
,但在故事板中沒有設置自動佈局約束。我現在困惑的是爲什麼不view1
有這個問題,因爲他們都添加在故事板?
你有沒有刪除所有來自SB的限制? – sschale
是的。我重複檢查 – Liumx31