2016-11-18 62 views
1

我正在尝试不使用故事板并仅在代码中编写UI。我有按钮属性,我添加到子视图viewDidLoad并设置约束。我应该在屏幕中间看到一个按钮。设置一个按钮,而不使用xcode中的故事板swift

class ViewController: UIViewController { 

    var setupButton: UIButton = { 
     let button = UIButton(type: .system) 
     button.backgroundColor = UIColor(r: 80, g: 101, b: 161, a: 256) 
     button.setTitle("Button", for: .normal) 
     button.setTitleColor(UIColor.white, for: .normal) 
     button.translatesAutoresizingMaskIntoConstraints = false 
     button.titleLabel?.font = UIFont.boldSystemFont(ofSize: 18) 
     return button 
    }() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 


     view.addSubview(setupButton) 
     coolButton() 

    } 

    func coolButton() { 

     setupButton.centerXAnchor.constraint(equalTo: view.centerXAnchor) 
     setupButton.centerYAnchor.constraint(equalTo: view.centerYAnchor) 
     setupButton.widthAnchor.constraint(equalTo: view.widthAnchor, constant: -24) 
     setupButton.heightAnchor.constraint(equalToConstant: 150) 




    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


} 

extension UIColor { 

    convenience init(r: CGFloat, g: CGFloat, b: CGFloat, a: CGFloat) { 
     self.init(red: r/255, green: g/255, blue: b/255, alpha: a/255) 
    } 

} 

回答

1

从NSLayoutConstraint文档:

请注意,只有有效约束影响计算的布局。

对于新创建的约束,默认情况下活动属性为NO。

您只需将isActive属性设置为true即可。

setupButton.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true 
setupButton.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true 
setupButton.widthAnchor.constraint(equalTo: view.widthAnchor, constant: -24).isActive = true 
setupButton.heightAnchor.constraint(equalToConstant: 150).isActive = true 
相关问题