我尝试将所有视图居中居中,垂直间距为40.电子邮件和密码字段显示。但是登录和注册按钮根本不显示。
view.addSubview(emailidTextField)
view.addSubview(passwordTextField)
view.addSubview(loginButton)
view.addSubview(signupButton)
passwordTextField.addConstraint(NSLayoutConstraint(item: passwordTextField, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: self.view.frame.width - 20))
passwordTextField.addConstraint(NSLayoutConstraint(item: passwordTextField, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 40))
emailidTextField.addConstraint(NSLayoutConstraint(item: emailidTextField, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: self.view.frame.width - 20))
emailidTextField.addConstraint(NSLayoutConstraint(item: emailidTextField, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 40))
loginButton.addConstraint(NSLayoutConstraint(item: loginButton, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: self.view.frame.width - 20))
loginButton.addConstraint(NSLayoutConstraint(item: loginButton, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 40))
signupButton.addConstraint(NSLayoutConstraint(item: signupButton, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: self.view.frame.width - 20))
signupButton.addConstraint(NSLayoutConstraint(item: signupButton, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 40))
view.addConstraint(NSLayoutConstraint(item: passwordTextField, attribute: NSLayoutAttribute.CenterXWithinMargins, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.CenterXWithinMargins, multiplier: 1, constant: 0))
view.addConstraint(NSLayoutConstraint(item: passwordTextField, attribute: NSLayoutAttribute.CenterYWithinMargins, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.CenterYWithinMargins, multiplier: 1, constant: 0))
view.addConstraint(NSLayoutConstraint(item: emailidTextField, attribute: NSLayoutAttribute.CenterXWithinMargins, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.CenterXWithinMargins, multiplier: 1, constant: 0))
view.addConstraint(NSLayoutConstraint(item: emailidTextField, attribute: NSLayoutAttribute.Bottom, relatedBy: NSLayoutRelation.Equal, toItem: passwordTextField, attribute: NSLayoutAttribute.Top, multiplier: 1, constant: -10))
view.addConstraint(NSLayoutConstraint(item: loginButton, attribute: NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.CenterX, multiplier: 1, constant: 0))
view.addConstraint(NSLayoutConstraint(item: loginButton, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: passwordTextField, attribute: NSLayoutAttribute.Bottom, multiplier: 1, constant: 40))
view.addConstraint(NSLayoutConstraint(item: signupButton, attribute: NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.CenterX, multiplier: 1, constant: 0))
view.addConstraint(NSLayoutConstraint(item: signupButton, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: loginButton, attribute: NSLayoutAttribute.Bottom, multiplier: 1, constant: 40))
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x7989a9e0 UIButton:0x79990040'Signup'.centerX == UIView:0x79c87d70.centerX>
我水平和垂直居中密码字段。然后使用它作为参考垂直空间其他视图。关于我做错什么的任何指针?
答案 0 :(得分:0)
您的约束工作正常,我在我的代码中尝试了相同的工作,并且它正如您所期望的那样工作,只是我添加了一些属性来展示按钮和textFields,
编辑的约束代码如下,
让emailidTextField = UITextField() emailidTextField.borderStyle = UITextBorderStyle.Line emailidTextField.translatesAutoresizingMaskIntoConstraints = false emailidTextField.placeholder =&#34;电子邮件ID&#34;
let passwordTextField = UITextField()
passwordTextField.borderStyle = UITextBorderStyle.Line
passwordTextField.translatesAutoresizingMaskIntoConstraints = false
passwordTextField.placeholder = "Password"
let loginButton = UIButton(type: UIButtonType.System) as UIButton
loginButton.translatesAutoresizingMaskIntoConstraints = false
loginButton.setTitle("Login", forState: UIControlState.Normal)
loginButton.titleLabel?.textColor = UIColor.blueColor()
loginButton.backgroundColor = UIColor.lightGrayColor()
let signupButton = UIButton(type: UIButtonType.System) as UIButton
signupButton.translatesAutoresizingMaskIntoConstraints = false
signupButton.setTitle("Sign Up", forState: UIControlState.Normal)
loginButton.titleLabel?.textColor = UIColor.blueColor()
signupButton.backgroundColor = UIColor.lightGrayColor()
view.addSubview(emailidTextField)
view.addSubview(passwordTextField)
view.addSubview(loginButton)
view.addSubview(signupButton)
passwordTextField.addConstraint(NSLayoutConstraint(item: passwordTextField, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: self.view.frame.width - 20))
passwordTextField.addConstraint(NSLayoutConstraint(item: passwordTextField, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 40))
emailidTextField.addConstraint(NSLayoutConstraint(item: emailidTextField, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: self.view.frame.width - 20))
emailidTextField.addConstraint(NSLayoutConstraint(item: emailidTextField, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 40))
loginButton.addConstraint(NSLayoutConstraint(item: loginButton, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: self.view.frame.width - 20))
loginButton.addConstraint(NSLayoutConstraint(item: loginButton, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 40))
signupButton.addConstraint(NSLayoutConstraint(item: signupButton, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: self.view.frame.width - 20))
signupButton.addConstraint(NSLayoutConstraint(item: signupButton, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 40))
view.addConstraint(NSLayoutConstraint(item: passwordTextField, attribute: NSLayoutAttribute.CenterXWithinMargins, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.CenterXWithinMargins, multiplier: 1, constant: 0))
view.addConstraint(NSLayoutConstraint(item: passwordTextField, attribute: NSLayoutAttribute.CenterYWithinMargins, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.CenterYWithinMargins, multiplier: 1, constant: 0))
view.addConstraint(NSLayoutConstraint(item: emailidTextField, attribute: NSLayoutAttribute.CenterXWithinMargins, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.CenterXWithinMargins, multiplier: 1, constant: 0))
view.addConstraint(NSLayoutConstraint(item: emailidTextField, attribute: NSLayoutAttribute.Bottom, relatedBy: NSLayoutRelation.Equal, toItem: passwordTextField, attribute: NSLayoutAttribute.Top, multiplier: 1, constant: -10))
view.addConstraint(NSLayoutConstraint(item: loginButton, attribute: NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.CenterX, multiplier: 1, constant: 0))
view.addConstraint(NSLayoutConstraint(item: loginButton, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: passwordTextField, attribute: NSLayoutAttribute.Bottom, multiplier: 1, constant: 40))
view.addConstraint(NSLayoutConstraint(item: signupButton, attribute: NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.CenterX, multiplier: 1, constant: 0))
view.addConstraint(NSLayoutConstraint(item: signupButton, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: loginButton, attribute: NSLayoutAttribute.Bottom, multiplier: 1, constant: 40))