Ios 如何使用Swift以编程方式添加约束

Ios 如何使用Swift以编程方式添加约束,ios,swift,uiview,autolayout,nslayoutconstraint,Ios,Swift,Uiview,Autolayout,Nslayoutconstraint,从上周开始,我就一直在努力想办法解决这个问题,没有进一步的进展。好的,因此我需要使用以下代码以编程方式将Swift中的一些约束应用于ui视图: var new_view:UIView! = UIView(frame: CGRectMake(0, 0, 100, 100)); new_view.backgroundColor = UIColor.redColor(); view.addSubview(new_view); var constX:NSLayoutConstraint = NSLay

从上周开始,我就一直在努力想办法解决这个问题,没有进一步的进展。好的,因此我需要使用以下代码以编程方式将Swift中的一些约束应用于
ui视图

var new_view:UIView! = UIView(frame: CGRectMake(0, 0, 100, 100));
new_view.backgroundColor = UIColor.redColor();
view.addSubview(new_view);

var constX:NSLayoutConstraint = NSLayoutConstraint(item: new_view, attribute: NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.CenterX, multiplier: 1, constant: 0);
self.view.addConstraint(constX);

var constY:NSLayoutConstraint = NSLayoutConstraint(item: new_view, attribute: NSLayoutAttribute.CenterY, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.CenterY, multiplier: 1, constant: 0);
self.view.addConstraint(constY);

var constW:NSLayoutConstraint = NSLayoutConstraint(item: new_view, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: new_view, attribute: NSLayoutAttribute.Width, multiplier: 1, constant: 0);
self.view.addConstraint(constW);

var constH:NSLayoutConstraint = NSLayoutConstraint(item: new_view, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: new_view, attribute: NSLayoutAttribute.Height, multiplier: 1, constant: 0);
self.view.addConstraint(constH);
但是Xcode会返回这种奇怪的输出:

2014-10-03 09:48:12.657 Test[35088:2454916] Unable to simultaneously satisfy constraints.  Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
"<NSLayoutConstraint:0x7fa4ea446830 UIView:0x7fa4ea429290.centerX == UIView:0x7fa4ea4470f0.centerX>",
"<NSAutoresizingMaskLayoutConstraint:0x7fa4ea4516c0 h=--& v=--& UIView:0x7fa4ea429290.midX == + 50>",
"<NSLayoutConstraint:0x7fa4ea452830 'UIView-Encapsulated-Layout-Width' H:[UIView:0x7fa4ea4470f0(375)]>",
"<NSAutoresizingMaskLayoutConstraint:0x7fa4ea446db0 h=-&- v=-&- 'UIView-Encapsulated-Layout-Left' H:|-(0)-[UIView:0x7fa4ea4470f0]   (Names: '|':UIWindow:0x7fa4ea444b20 )>"
)

Will attempt to recover by breaking constraint <NSLayoutConstraint:0x7fa4ea446830 UIView:0x7fa4ea429290.centerX == UIView:0x7fa4ea4470f0.centerX>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger. The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in
<UIKit/UIView.h> may also be helpful.

2014-10-03 09:48:12.658 Test[35088:2454916] Unable to simultaneously satisfy constraints.  Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSLayoutConstraint:0x7fa4ea44d160 UIView:0x7fa4ea429290.centerY == UIView:0x7fa4ea4470f0.centerY>",
"<NSAutoresizingMaskLayoutConstraint:0x7fa4ea451b30 h=--& v=--& UIView:0x7fa4ea429290.midY == + 50>",
"<NSLayoutConstraint:0x7fa4ea44cf00 'UIView-Encapsulated-Layout-Height' V:[UIView:0x7fa4ea4470f0(667)]>",
"<NSAutoresizingMaskLayoutConstraint:0x7fa4ea452700 h=-&- v=-&- 'UIView-Encapsulated-Layout-Top' V:|-(0)-[UIView:0x7fa4ea4470f0]  (Names: '|':UIWindow:0x7fa4ea444b20 )>"
)

Will attempt to recover by breaking constraint <NSLayoutConstraint:0x7fa4ea44d160 UIView:0x7fa4ea429290.centerY == UIView:0x7fa4ea4470f0.centerY>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger. The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.

2014-10-03 09:48:12.657测试[35088:2454916]无法同时满足约束条件。可能下面列表中至少有一个约束是您不想要的。试着这样做:(1)看看每个约束,试着找出你不期望的约束;(2) 找到添加了不需要的约束的代码,然后修复它。(注意:如果您看到不理解的NSAutoresizingMaskLayoutConstraints,请参阅UIView属性TranslatesAutoResizingMaskToConstraints的文档)
(
"",
"",
"",
""
)
将尝试通过打破约束进行恢复
在UIViewAlertForUnsatifiableConstraints处创建一个符号断点,以便在调试器中捕获该断点。中列出的UIView上UIConstraintBasedLayoutDebugging类别中的方法
也可能有帮助。

2014-10-03 09:48:12.658测试[35088:2454916]无法同时满足约束条件。可能下面列表中至少有一个约束是您不想要的。试着这样做:(1)看看每个约束,试着找出你不期望的约束;(2) 找到添加了不需要的约束的代码,然后修复它。(注意:如果您看到不理解的NSAutoresizingMaskLayoutConstraints,请参阅UIView属性TranslatesAutoResizingMaskToConstraints的文档) ( "", "", "", "" ) 将尝试通过打破约束进行恢复 在UIViewAlertForUnsatifiableConstraints处创建一个符号断点,以便在调试器中捕获该断点。中列出的UIView上UIConstraintBasedLayoutDebugging类别中的方法也可能会有所帮助。
你能帮我吗?
非常感谢

您是否计划在
UIViewController的
UIView
中放置一个宽度为100、高度为100的正方形
UIView
?如果是这样,您可以尝试以下6种自动布局样式之一(Swift 5/iOS 12.2):


1.使用
NSLayoutConstraint
初始值设定项
2.使用可视化格式语言
4.使用
UIView.AutoresizingMask
注:弹簧和支柱将在运行时转换为相应的自动布局约束

override func viewDidLoad() {
    let newView = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
    newView.backgroundColor = UIColor.red
    view.addSubview(newView)

    newView.translatesAutoresizingMaskIntoConstraints = true
    newView.center = CGPoint(x: view.bounds.midX, y: view.bounds.midY)
    newView.autoresizingMask = [UIView.AutoresizingMask.flexibleLeftMargin, UIView.AutoresizingMask.flexibleRightMargin, UIView.AutoresizingMask.flexibleTopMargin, UIView.AutoresizingMask.flexibleBottomMargin]
}

5.使用
nslayoutachor

6.使用
intrinsicContentSize
nslayoutachor

结果:


您是否计划在
UIViewController
UIView
中放置一个宽度为100、高度为100的正方形
UIView
?如果是这样,您可以尝试以下6种自动布局样式之一(Swift 5/iOS 12.2):


1.使用
NSLayoutConstraint
初始值设定项
2.使用可视化格式语言
4.使用
UIView.AutoresizingMask
注:弹簧和支柱将在运行时转换为相应的自动布局约束

override func viewDidLoad() {
    let newView = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
    newView.backgroundColor = UIColor.red
    view.addSubview(newView)

    newView.translatesAutoresizingMaskIntoConstraints = true
    newView.center = CGPoint(x: view.bounds.midX, y: view.bounds.midY)
    newView.autoresizingMask = [UIView.AutoresizingMask.flexibleLeftMargin, UIView.AutoresizingMask.flexibleRightMargin, UIView.AutoresizingMask.flexibleTopMargin, UIView.AutoresizingMask.flexibleBottomMargin]
}

5.使用
nslayoutachor

6.使用
intrinsicContentSize
nslayoutachor

结果:


正如错误消息所示,问题在于您有类型为
NSAutoresizingMaskLayoutConstraints
的约束与显式约束冲突,因为
new\u view.TranslatesAutoResizingMaskToConstraints
设置为true

这是在代码中创建的视图的默认设置。您可以按如下方式将其关闭:

var new_view:UIView! = UIView(frame: CGRectMake(0, 0, 100, 100))
new_view.translatesAutoresizingMaskIntoConstraints = false
此外,您的宽度和高度限制也很奇怪。如果希望视图具有恒定宽度,这是正确的方法:

new_view.addConstraint(NSLayoutConstraint(
    item:new_view, attribute:NSLayoutAttribute.Width,
    relatedBy:NSLayoutRelation.Equal,
    toItem:nil, attribute:NSLayoutAttribute.NotAnAttribute,
    multiplier:0, constant:100))
(将100替换为所需的宽度。)

如果部署目标是iOS 9.0或更高版本,则可以使用以下较短的代码:

new_view.widthAnchor.constraintEqualToConstant(100).active = true
无论如何,对于这样的布局(固定大小且在父视图中居中),使用自动调整大小遮罩并让系统将遮罩转换为约束会更简单:

var new_view:UIView! = UIView(frame: CGRectMake(0, 0, 100, 100))
new_view.backgroundColor = UIColor.redColor();
view.addSubview(new_view);

// This is the default setting but be explicit anyway...
new_view.translatesAutoresizingMaskIntoConstraints = true

new_view.autoresizingMask = [ .FlexibleTopMargin, .FlexibleBottomMargin,
    .FlexibleLeftMargin, .FlexibleRightMargin ]

new_view.center = CGPointMake(view.bounds.midX, view.bounds.midY)

请注意,即使同时使用自动布局,使用自动调整大小也是完全合法的。(UIKit在内部的许多地方仍然使用自动调整大小。)问题是,很难对使用自动调整大小的视图应用其他约束。

正如错误消息所示,问题是您的约束类型为
nsAutoResizengMaskLayoutConstraints
,与显式约束冲突,因为
new\u view.translatesAutoresizingMaskIntoConstraints
设置为true

    var xCenterConstraint : NSLayoutConstraint!
    var yCenterConstraint: NSLayoutConstraint!

 xCenterConstraint = NSLayoutConstraint(item: self.view, attribute: .CenterX, relatedBy: .Equal, toItem: (Your view NAme), attribute: .CenterX, multiplier: 1, constant: 0)
            self.view.addConstraint(xCenterConstraint)

 yCenterConstraint = NSLayoutConstraint(item: self.view, attribute: .CenterY, relatedBy: .Equal, toItem: (Your view Name), attribute: .CenterY, multiplier: 1, constant: 0)
            self.view.addConstraint(yCenterConstraint)
这是在代码中创建的视图的默认设置。您可以按如下方式将其关闭:

var new_view:UIView! = UIView(frame: CGRectMake(0, 0, 100, 100))
new_view.translatesAutoresizingMaskIntoConstraints = false
此外,您的宽度和高度限制也很奇怪。如果希望视图具有恒定宽度,这是正确的方法:

new_view.addConstraint(NSLayoutConstraint(
    item:new_view, attribute:NSLayoutAttribute.Width,
    relatedBy:NSLayoutRelation.Equal,
    toItem:nil, attribute:NSLayoutAttribute.NotAnAttribute,
    multiplier:0, constant:100))
(将100替换为所需的宽度。)

如果部署目标是iOS 9.0或更高版本,则可以使用以下较短的代码:

new_view.widthAnchor.constraintEqualToConstant(100).active = true
无论如何,对于这样的布局(固定大小且在父视图中居中),使用自动调整大小遮罩并让系统将遮罩转换为约束会更简单:

var new_view:UIView! = UIView(frame: CGRectMake(0, 0, 100, 100))
new_view.backgroundColor = UIColor.redColor();
view.addSubview(new_view);

// This is the default setting but be explicit anyway...
new_view.translatesAutoresizingMaskIntoConstraints = true

new_view.autoresizingMask = [ .FlexibleTopMargin, .FlexibleBottomMargin,
    .FlexibleLeftMargin, .FlexibleRightMargin ]

new_view.center = CGPointMake(view.bounds.midX, view.bounds.midY)

请注意,即使同时使用自动布局,使用自动调整大小也是完全合法的。(UIKit在内部的许多地方仍然使用自动调整大小。)问题是,很难对使用自动调整大小的视图应用附加约束。

这有助于我直观地学习,因此这是一个补充答案

    var xCenterConstraint : NSLayoutConstraint!
    var yCenterConstraint: NSLayoutConstraint!

 xCenterConstraint = NSLayoutConstraint(item: self.view, attribute: .CenterX, relatedBy: .Equal, toItem: (Your view NAme), attribute: .CenterX, multiplier: 1, constant: 0)
            self.view.addConstraint(xCenterConstraint)

 yCenterConstraint = NSLayoutConstraint(item: self.view, attribute: .CenterY, relatedBy: .Equal, toItem: (Your view Name), attribute: .CenterY, multiplier: 1, constant: 0)
            self.view.addConstraint(yCenterConstraint)
样板代码 以下每个示例都是独立于其他示例的

销左边缘
myView.leading=leadingMargin+20

方法1:锚定样式

let margins = view.layoutMarginsGuide
myView.leadingAnchor.constraint(equalTo: margins.leadingAnchor, constant: 20).isActive = true
NSLayoutConstraint(item: myView, attribute: NSLayoutAttribute.leading, relatedBy: NSLayoutRelation.equal, toItem: view, attribute: NSLayoutAttribute.leadingMargin, multiplier: 1.0, constant: 20.0).isActive = true
myView.widthAnchor.constraint(equalToConstant: 200).isActive = true
myView.heightAnchor.constraint(equalToConstant: 100).isActive = true
NSLayoutConstraint(item: myView, attribute: NSLayoutAttribute.width, relatedBy: NSLayoutRelation.equal, toItem: nil, attribute: NSLayoutAttribute.notAnAttribute, multiplier: 1, constant: 200).isActive = true
NSLayoutConstraint(item: myView, attribute: NSLayoutAttribute.height, relatedBy: NSLayoutRelation.equal, toItem: nil, attribute: NSLayoutAttribute.notAnAttribute, multiplier: 1, constant: 100).isActive = true
myView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
myView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
NSLayoutConstraint(item: myView, attribute: NSLayoutAttribute.centerX, relatedBy: NSLayoutRelation.equal, toItem: view, attribute: NSLayoutAttribute.centerX, multiplier: 1, constant: 0).isActive = true
NSLayoutConstraint(item: myView, attribute: NSLayoutAttribute.centerY, relatedBy: NSLayoutRelation.equal, toItem: view, attribute: NSLayoutAttribute.centerY, multiplier: 1, constant: 0).isActive = true
  • 除了
    引导锚
    ,还有
    牵引锚
    顶锚
    底锚
方法2:NSLayoutConstraint样式

let margins = view.layoutMarginsGuide
myView.leadingAnchor.constraint(equalTo: margins.leadingAnchor, constant: 20).isActive = true
NSLayoutConstraint(item: myView, attribute: NSLayoutAttribute.leading, relatedBy: NSLayoutRelation.equal, toItem: view, attribute: NSLayoutAttribute.leadingMargin, multiplier: 1.0, constant: 20.0).isActive = true
myView.widthAnchor.constraint(equalToConstant: 200).isActive = true
myView.heightAnchor.constraint(equalToConstant: 100).isActive = true
NSLayoutConstraint(item: myView, attribute: NSLayoutAttribute.width, relatedBy: NSLayoutRelation.equal, toItem: nil, attribute: NSLayoutAttribute.notAnAttribute, multiplier: 1, constant: 200).isActive = true
NSLayoutConstraint(item: myView, attribute: NSLayoutAttribute.height, relatedBy: NSLayoutRelation.equal, toItem: nil, attribute: NSLayoutAttribute.notAnAttribute, multiplier: 1, constant: 100).isActive = true
myView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
myView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
NSLayoutConstraint(item: myView, attribute: NSLayoutAttribute.centerX, relatedBy: NSLayoutRelation.equal, toItem: view, attribute: NSLayoutAttribute.centerX, multiplier: 1, constant: 0).isActive = true
NSLayoutConstraint(item: myView, attribute: NSLayoutAttribute.centerY, relatedBy: NSLayoutRelation.equal, toItem: view, attribute: NSLayoutAttribute.centerY, multiplier: 1, constant: 0).isActive = true
  • 除了
    NSLayoutConstraint(item: myView, attribute: NSLayoutAttribute.centerX, relatedBy: NSLayoutRelation.equal, toItem: view, attribute: NSLayoutAttribute.centerX, multiplier: 1, constant: 0).isActive = true
    NSLayoutConstraint(item: myView, attribute: NSLayoutAttribute.centerY, relatedBy: NSLayoutRelation.equal, toItem: view, attribute: NSLayoutAttribute.centerY, multiplier: 1, constant: 0).isActive = true
    
    var constW = NSLayoutConstraint(item: newView, 
        attribute: .Width, 
        relatedBy: .Equal, 
        toItem: nil, 
        attribute: .NotAnAttribute, 
        multiplier: 1, 
        constant: 100)
    newView.addConstraint(constW)
    
    var constH = NSLayoutConstraint(item: newView, 
        attribute: .Height, 
        relatedBy: .Equal, 
        toItem: nil, 
        attribute: .NotAnAttribute, 
        multiplier: 1, 
        constant: 100)
    newView.addConstraint(constH)
    
       // creating the view
            let newView = UIView()
            newView.backgroundColor = UIColor.redColor()
            newView.translatesAutoresizingMaskIntoConstraints = false
            view.addSubview(newView)
    
            // creating the constraint 
    
            // attribute and relation cannot be set directyl you need to create a cariable of them
            let layout11 = NSLayoutAttribute.CenterX
            let layout21 = NSLayoutRelation.Equal
            let layout31 = NSLayoutAttribute.CenterY
            let layout41 = NSLayoutAttribute.Width
            let layout51 = NSLayoutAttribute.Height
            let layout61 = NSLayoutAttribute.NotAnAttribute
    
            // defining all the constraint
            let horizontalConstraint = NSLayoutConstraint(item: newView, attribute: layout11, relatedBy: layout21, toItem: view, attribute: layout11, multiplier: 1, constant: 0)
            let verticalConstraint = NSLayoutConstraint(item: newView, attribute: layout31, relatedBy: layout21, toItem: view, attribute: layout31, multiplier: 1, constant: 0)
            let widthConstraint = NSLayoutConstraint(item: newView, attribute: layout41, relatedBy: layout21, toItem: nil, attribute: layout61, multiplier: 1, constant: 100)
            let heightConstraint = NSLayoutConstraint(item: newView, attribute: layout51, relatedBy: layout21, toItem: nil, attribute: layout61, multiplier: 1, constant: 100)
    
            // adding all the constraint
            NSLayoutConstraint.activateConstraints([horizontalConstraint,verticalConstraint,widthConstraint,heightConstraint])
    
        view.translatesAutoresizingMaskIntoConstraints = false
        let attributes: [NSLayoutAttribute] = [.top, .bottom, .right, .left]
        NSLayoutConstraint.activate(attributes.map {
            NSLayoutConstraint(item: view, attribute: $0, relatedBy: .equal, toItem: view.superview, attribute: $0, multiplier: 1, constant: 0)
        })
    
        view.translatesAutoresizingMaskIntoConstraints = false
        view.topAnchor.constraint(equalTo: view.superview!.topAnchor).isActive = true
        view.bottomAnchor.constraint(equalTo: view.superview!.bottomAnchor).isActive = true
        view.leadingAnchor.constraint(equalTo: view.superview!.leadingAnchor, constant: 10).isActive = true
        view.trailingAnchor.constraint(equalTo: view.superview!.trailingAnchor, constant: 10).isActive = true
    
    override func viewDidLoad() {
                super.viewDidLoad()
    
    
    let myLabel = UILabel()
            myLabel.labelFrameUpdate(label: myLabel, text: "Welcome User", font: UIFont(name: "times new roman", size: 40)!, textColor: UIColor.red, textAlignment: .center, numberOfLines: 0, borderWidth: 2.0, BorderColor: UIColor.red.cgColor)
            self.view.addSubview(myLabel)
    
    
             let myLabelhorizontalConstraint = NSLayoutConstraint(item: myLabel, attribute: NSLayoutAttribute.centerX, relatedBy: NSLayoutRelation.equal, toItem: self.view, attribute: NSLayoutAttribute.centerX, multiplier: 1, constant: 0)
            let myLabelverticalConstraint = NSLayoutConstraint(item: myLabel, attribute: NSLayoutAttribute.centerY, relatedBy: NSLayoutRelation.equal, toItem: self.view, attribute: NSLayoutAttribute.centerY, multiplier: 1, constant: 0)
            let mylabelLeading = NSLayoutConstraint(item: myLabel, attribute: NSLayoutAttribute.leading, relatedBy: NSLayoutRelation.equal, toItem: self.view, attribute: NSLayoutAttribute.leading, multiplier: 1, constant: 10)
            let mylabelTrailing = NSLayoutConstraint(item: myLabel, attribute: NSLayoutAttribute.trailing, relatedBy: NSLayoutRelation.equal, toItem: self.view, attribute: NSLayoutAttribute.trailing, multiplier: 1, constant: -10)
            let myLabelheightConstraint = NSLayoutConstraint(item: myLabel, attribute: NSLayoutAttribute.height, relatedBy: NSLayoutRelation.equal, toItem: nil, attribute: NSLayoutAttribute.notAnAttribute, multiplier: 1, constant: 50)
            NSLayoutConstraint.activate(\[myLabelhorizontalConstraint, myLabelverticalConstraint, myLabelheightConstraint,mylabelLeading,mylabelTrailing\])
    }
    
    extension UILabel
    {
        func labelFrameUpdate(label:UILabel,text:String = "This is sample Label",font:UIFont = UIFont(name: "times new roman", size: 20)!,textColor:UIColor = UIColor.red,textAlignment:NSTextAlignment = .center,numberOfLines:Int = 0,borderWidth:CGFloat = 2.0,BorderColor:CGColor = UIColor.red.cgColor){
            label.translatesAutoresizingMaskIntoConstraints = false
            label.text = text
            label.font = font
            label.textColor = textColor
            label.textAlignment = textAlignment
            label.numberOfLines = numberOfLines
            label.layer.borderWidth = borderWidth
            label.layer.borderColor = UIColor.red.cgColor
        }
    }
    
    import UIKit
    
    class ViewController: UIViewController {
    
    let redView: UIView = {
    
        let view = UIView()
        view.translatesAutoresizingMaskIntoConstraints = false
        view.backgroundColor = .red
        return view
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
    
        setupViews()
        setupAutoLayout()
    }
    
    func setupViews() {
    
        view.backgroundColor = .white
        view.addSubview(redView)
    }
    
    func setupAutoLayout() {
    
        // Available from iOS 9 commonly known as Anchoring System for AutoLayout...
        redView.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 20).isActive = true
        redView.rightAnchor.constraint(equalTo: view.rightAnchor, constant: -20).isActive = true
    
        redView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
        redView.heightAnchor.constraint(equalToConstant: 300).isActive = true
    
        // You can also modified above last two lines as follows by commenting above & uncommenting below lines...
        // redView.topAnchor.constraint(equalTo: view.topAnchor, constant: 20).isActive = true
        // redView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
     }
    }
    
     /*
    // regular use
    1.leftAnchor
    2.rightAnchor
    3.topAnchor
    // intermediate use
    4.widthAnchor
    5.heightAnchor
    6.bottomAnchor
    7.centerXAnchor
    8.centerYAnchor
    // rare use
    9.leadingAnchor
    10.trailingAnchor
    etc. (note: very project to project)
    */
    
    view.snp.makeConstraints { make in
        make.edges.equalToSuperview()
    }
    
    import UIKit
    
    class ViewController: UIViewController {
    
    override func viewDidLoad() {
    super.viewDidLoad()
    
    let myImageView:UIImageView = UIImageView()
    myImageView.backgroundColor = UIColor.red
    myImageView.image = UIImage(named:"sample_dog")!
    myImageView.translatesAutoresizingMaskIntoConstraints = false
    myImageView.layer.borderColor = UIColor.red.cgColor
    myImageView.layer.borderWidth = 10
    self.view.addSubview(myImageView)
            
    view.removeConstraints(view.constraints)
    
    
    view.addConstraint(NSLayoutConstraint(
    item: myImageView,
    attribute: .top,
    relatedBy: .equal,
    toItem: view,
    attribute: .top,
    multiplier: 1,
    constant:100)
        
    )
    
    view.addConstraint(NSLayoutConstraint(
    item: myImageView,
    attribute: .centerX,
    relatedBy: .equal,
    toItem: view,
    attribute: .centerX,
    multiplier: 1,
    constant:0)
    )
        
    view.addConstraint(NSLayoutConstraint(
    item: myImageView,
    attribute: .height,
    relatedBy: .equal,
    toItem: view,
    attribute: .width,
    multiplier: 0.5,
    constant:40))
        
    view.addConstraint(NSLayoutConstraint(
    item: myImageView,
    attribute: .width,
    relatedBy: .equal,
    toItem: view,
    attribute: .width,
    multiplier: 0.5,
    constant:40))
        
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
    }
    
      var yellowView: UIView!
        var redView: UIView!
    
        override func loadView() {
    
            // UI
    
            let view = UIView()
            view.backgroundColor = .white
    
            yellowView = UIView()
            yellowView.backgroundColor = .yellow
            view.addSubview(yellowView)
    
            redView = UIView()
            redView.backgroundColor = .red
            view.addSubview(redView)
    
            // Layout
            redView.translatesAutoresizingMaskIntoConstraints = false
            yellowView.translatesAutoresizingMaskIntoConstraints = false
            NSLayoutConstraint.activate([
                yellowView.topAnchor.constraint(equalTo: view.topAnchor, constant: 20),
                yellowView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20),
                yellowView.widthAnchor.constraint(equalToConstant: 80),
                yellowView.heightAnchor.constraint(equalToConstant: 80),
    
                redView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -20),
                redView.trailingAnchor.constraint(equalTo: view.trailingAnchor,constant: -20),
                redView.widthAnchor.constraint(equalToConstant: 80),
                redView.heightAnchor.constraint(equalToConstant: 80)
                ])
    
            self.view = view
        }
    
    fileprivate func setupName() { 
    
        lblName.text = "Hello world"
    
        // Step 1
        lblName.translatesAutoresizingMaskIntoConstraints = false
    
        //Step 2
        self.view.addSubview(lblName)
    
        //Step 3
        NSLayoutConstraint.activate([
            lblName.centerXAnchor.constraint(equalTo: self.view.centerXAnchor),
            lblName.centerYAnchor.constraint(equalTo: self.view.centerYAnchor)
        ])
    }
    
    view.addSubview(myView1)
    myView1.translatesAutoresizingMaskIntoConstraints = false
    NSLayoutConstraint.activate([
        myView1.centerXAnchor.constraint(equalTo: view.centerXAnchor),
        myView1.centerYAnchor.constraint(equalTo: view.centerYAnchor),
        myView1.widthAnchor.constraint(equalToConstant: 100),
        myView1.heightAnchor.constraint(equalToConstant: 100),
    ])
    
        view.addSubview(myView2)
        myView2.translatesAutoresizingMaskIntoConstraints = false
    
        NSLayoutConstraint.activate([
            myView2.leadingAnchor.constraint(equalTo: view.leadingAnchor,constant: 16),
            myView2.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor,constant: 16),
            myView2.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 0.3),
            myView2.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.3)
        ])
    
    
     - firstView.coverWholeSuperview()
     - firstView.constraints(size: CGSize(width: 44, height: 44), centerX: view.centerXAnchor, centerY: view.centerXAnchor)
     - firstView.constraints(top: view.topAnchor, 
                             leading: secondView.leadingAnchor, 
                             bottom: view.bottomAnchor, 
                             trailing: secondView.trailingAnchor, 
                             padding: UIEdgeInsets(top: 12, left: 12, bottom: 12, right: 12))
    
    
    extension UIView {
        /// Attaches all sides of the receiver to its parent view
        func coverWholeSuperview(margin: CGFloat = 0.0) {
            let view = superview
            layoutAttachTop(to: view, margin: margin)
            layoutAttachBottom(to: view, margin: margin)
            layoutAttachLeading(to: view, margin: margin)
            layoutAttachTrailing(to: view, margin: margin)
    
        }
    
        /// Attaches the top of the current view to the given view's top if it's a superview of the current view
        /// or to it's bottom if it's not (assuming this is then a sibling view).
        @discardableResult
        func layoutAttachTop(to: UIView? = nil, margin: CGFloat = 0.0) -> NSLayoutConstraint {
    
            let view: UIView? = to ?? superview
            let isSuperview = view == superview
            let constraint = NSLayoutConstraint(item: self, attribute: .top, relatedBy: .equal,
                                                toItem: view, attribute: isSuperview ? .top : .bottom, multiplier: 1.0,
                                                constant: margin)
            superview?.addConstraint(constraint)
    
            return constraint
        }
    
        /// Attaches the bottom of the current view to the given view
        @discardableResult
        func layoutAttachBottom(to: UIView? = nil, margin: CGFloat = 0.0, priority: UILayoutPriority? = nil) -> NSLayoutConstraint {
    
            let view: UIView? = to ?? superview
            let isSuperview = (view == superview) || false
            let constraint = NSLayoutConstraint(item: self, attribute: .bottom, relatedBy: .equal,
                                                toItem: view, attribute: isSuperview ? .bottom : .top, multiplier: 1.0,
                                                constant: -margin)
            if let priority = priority {
                constraint.priority = priority
            }
            superview?.addConstraint(constraint)
    
            return constraint
        }
    
        /// Attaches the leading edge of the current view to the given view
        @discardableResult
        func layoutAttachLeading(to: UIView? = nil, margin: CGFloat = 0.0) -> NSLayoutConstraint {
    
            let view: UIView? = to ?? superview
            let isSuperview = (view == superview) || false
            let constraint = NSLayoutConstraint(item: self, attribute: .leading, relatedBy: .equal,
                                                toItem: view, attribute: isSuperview ? .leading : .trailing, multiplier: 1.0,
                                                constant: margin)
            superview?.addConstraint(constraint)
    
            return constraint
        }
    
        /// Attaches the trailing edge of the current view to the given view
        @discardableResult
        func layoutAttachTrailing(to: UIView? = nil, margin: CGFloat = 0.0, priority: UILayoutPriority? = nil) -> NSLayoutConstraint {
    
            let view: UIView? = to ?? superview
            let isSuperview = (view == superview) || false
            let constraint = NSLayoutConstraint(item: self, attribute: .trailing, relatedBy: .equal,
                                                toItem: view, attribute: isSuperview ? .trailing : .leading, multiplier: 1.0,
                                                constant: -margin)
            if let priority = priority {
                constraint.priority = priority
            }
            superview?.addConstraint(constraint)
    
            return constraint
        }
    
        // For anchoring View
        struct AnchoredConstraints {
            var top, leading, bottom, trailing, width, height, centerX, centerY: NSLayoutConstraint?
        }
    
        @discardableResult
        func constraints(top: NSLayoutYAxisAnchor? = nil, leading: NSLayoutXAxisAnchor? = nil, bottom: NSLayoutYAxisAnchor? = nil,
                    trailing: NSLayoutXAxisAnchor? = nil, padding: UIEdgeInsets = .zero, size: CGSize = .zero,
                    centerX: NSLayoutXAxisAnchor? = nil, centerY: NSLayoutYAxisAnchor? = nil,
                    centerXOffset: CGFloat = 0, centerYOffset: CGFloat = 0) -> AnchoredConstraints {
    
            translatesAutoresizingMaskIntoConstraints = false
            var anchoredConstraints = AnchoredConstraints()
    
            if let top = top {
                anchoredConstraints.top = topAnchor.constraint(equalTo: top, constant: padding.top)
            }
    
            if let leading = leading {
                anchoredConstraints.leading = leadingAnchor.constraint(equalTo: leading, constant: padding.left)
            }
    
            if let bottom = bottom {
                anchoredConstraints.bottom = bottomAnchor.constraint(equalTo: bottom, constant: -padding.bottom)
            }
    
            if let trailing = trailing {
                anchoredConstraints.trailing = trailingAnchor.constraint(equalTo: trailing, constant: -padding.right)
            }
    
            if size.width != 0 {
                anchoredConstraints.width = widthAnchor.constraint(equalToConstant: size.width)
            }
    
            if size.height != 0 {
                anchoredConstraints.height = heightAnchor.constraint(equalToConstant: size.height)
            }
    
            if let centerX = centerX {
                anchoredConstraints.centerX = centerXAnchor.constraint(equalTo: centerX, constant: centerXOffset)
            }
    
            if let centerY = centerY {
                anchoredConstraints.centerY = centerYAnchor.constraint(equalTo: centerY, constant: centerYOffset)
            }
    
            [anchoredConstraints.top, anchoredConstraints.leading, anchoredConstraints.bottom,
             anchoredConstraints.trailing, anchoredConstraints.width,
             anchoredConstraints.height, anchoredConstraints.centerX,
             anchoredConstraints.centerY].forEach { $0?.isActive = true }
    
            return anchoredConstraints
        }
    }
    
    boxView.items = [
       new_view.boxed.centerX().centerY().relativeWidth(1.0).relativeHeight(1.0)
    ]
    
        imagePreview!.isUserInteractionEnabled = true
        imagePreview!.isExclusiveTouch = true
        imagePreview!.contentMode = UIView.ContentMode.scaleAspectFit
        
        // Remove all constraints
        imagePreview!.removeAllConstraints()
        
        // Add the new constraints
        let guide = view.safeAreaLayoutGuide
        imagePreview!.translatesAutoresizingMaskIntoConstraints = false
        imagePreview!.leadingAnchor.constraint(equalTo: guide.leadingAnchor).isActive = true
        imagePreview!.trailingAnchor.constraint(equalTo: guide.trailingAnchor).isActive = true
        imagePreview!.heightAnchor.constraint(equalTo: guide.heightAnchor, multiplier: 1.0).isActive = true
    
    extension UIView {
        
        func removeAllConstraints() {
            var _superview = self.superview
            
            func removeAllConstraintsFromView(view: UIView) { for c in view.constraints { view.removeConstraint(c) } }
            
            while let superview = _superview {
                for constraint in superview.constraints {
                    
                    if let first = constraint.firstItem as? UIView, first == self {
                        superview.removeConstraint(constraint)
                    }
                    
                    if let second = constraint.secondItem as? UIView, second == self {
                        superview.removeConstraint(constraint)
                    }
                }
                
                _superview = superview.superview
            }
            
            self.removeConstraints(self.constraints)
            self.translatesAutoresizingMaskIntoConstraints = true
        }
    }
    
    class ViewController: UIViewController {
        
        let rectView: UIView = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
        
        override func viewDidLoad() {
            super.viewDidLoad()
            setupViews()
        }
        
        private func setupViews() {
            rectView.backgroundColor = .red
            view.addSubview(rectView)
    
            rectView.snp.makeConstraints {
              $0.center.equalToSuperview()
            }
        }
    }