1. 程式人生 > >Swift程式碼動態建立NSLayoutConstraint佈局

Swift程式碼動態建立NSLayoutConstraint佈局

示例效果
這裡寫圖片描述

說明
黃色lable為子view(childView),紅色view為父view(parentView)。兩者關係為:
childView在距離父控制元件的左右各20邊距處, 高度25。chidView在parentView中垂直方向上居中顯示。

注:約束的設定,控制元件內部約束由自己新增,比如寬高,如果是與其他的
控制元件約束那麼有父控制元件新增

NSLayoutConstraint引數說明:

/**
 * 建立約束 NSLayoutConstraint  引數 說明:
 * item 自己
 * attribute
 * relatedBy 大於等於 小於等於 等於 ...
 * toItem 另外一個控制元件
 * attribute 另一個控制元件的屬性
 * multiplier 乘以多少
 * constant : 加上多少
 * NSLayoutConstraint : 某個控制元件的屬性值 等於 另外一個控制元件的屬性值 
                乘以多少 加上多少
 * 新增約束 addConstraint
 */
NSLayoutConstraint(item view1: Any, attribute attr1: NSLayoutAttribute, relatedBy relation: NSLayoutRelation, toItem view2: Any?, attribute attr2: NSLayoutAttribute, multiplier: CGFloat, constant c: CGFloat)

建立子控制元件

let childView = UILabel()
childView.text = "正在連結伺服器"
childView.backgroundColor = UIColor.yellow
//背影黃色 childView.textAlignment = .center //文字居中對齊 parentView.backgroundColor = UIColor.red//設定父元素背影紅色,方便檢視效果

關閉autoresizing

// 關閉autoresizing,不然無效果
childView.translatesAutoresizingMaskIntoConstraints =false

建立約束:

//建立相對父view的左右間距各20
//在約束
let leftConstraint = NSLayoutConstraint(item: childView, attribute
: NSLayoutAttribute.leading, relatedBy: NSLayoutRelation.equal, toItem: topStatusBarView, attribute:NSLayoutAttribute.leading, multiplier: 1.0, constant: 20) //右約束 let rightConstraint = NSLayoutConstraint(item: childView, attribute: NSLayoutAttribute.trailing, relatedBy: NSLayoutRelation.equal, toItem: topStatusBarView, attribute:NSLayoutAttribute.trailing, multiplier: 1.0, constant: -20) let centerConstraint = NSLayoutConstraint(item: childView, attribute: NSLayoutAttribute.centerY, relatedBy: NSLayoutRelation.equal, toItem: topStatusBarView, attribute:NSLayoutAttribute.centerY, multiplier: 1.0, constant: 0) //子控制元件自身高度 let heigtConstraint = NSLayoutConstraint(item: childView, attribute: NSLayoutAttribute.height, relatedBy: NSLayoutRelation.equal, toItem: nil, attribute:NSLayoutAttribute.notAnAttribute, multiplier: 1.0, constant: 25) //子控制元件內部自己的屬性(高度,自己新增) childView.addConstraint(heigtConstraint) //子元素相對父親的元素,由父新增 parentView.addConstraints([leftConstraint, rightConstraint, centerConstraint])