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,attribute:NSLayoutAttribute.trailing,constant: -20)

let centerConstraint = NSLayoutConstraint(item: childView,attribute: NSLayoutAttribute.centerY,attribute:NSLayoutAttribute.centerY,constant: 0)

//子控件自身高度
let heigtConstraint = NSLayoutConstraint(item: childView,attribute: NSLayoutAttribute.height,toItem: nil,attribute:NSLayoutAttribute.notAnAttribute,constant: 25)

//子控件内部自己的属性(高度,自己添加
childView.addConstraint(heigtConstraint)

//子元素相对父亲的元素,由父添加
parentView.addConstraints([leftConstraint,rightConstraint,centerConstraint])
原文链接:https://www.f2er.com/swift/322435.html

猜你在找的Swift相关文章