咱们查看官方文档,能够看到文档是这样介绍该属性的:它是一个用来决定,是否将视图的自动调整大小的遮罩(autoresizing mask)转换为 Auto Layout 约束的布尔值。
bash
经过文档介绍咱们能够得知:当该属性为 true 时,系统会自动经过视图的 autoresizing mask 建立一组视图的约束,这些约束是基于你提供的 frame、bounds、center 这些属性。也就是说,当你给视图的 frame 赋值以后,它会为你建立静态的、基于 frame 的 Auto Layout 约束。如例 1-1 代码所示:app
例 1-1 属性值为 true且指定 frameiview
let exampleView = UIView(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
// 系统根据你指定的frame 给 exampleView 建立静态的 Auto Layout 约束
exampleView.backgroundColor = UIColor.green
view.addSubview(exampleView)
复制代码
在上述状况中,你是不能给视图添加额外的约束
来修改它的位置或大小的,若是添加额外的约束会致使约束冲突。如例 1-2 代码所示:布局
例 1-2 属性值为 true,指定 frame 且添加额外约束ui
...
// 例 1-1面的代码下添加此代码,会致使约束冲突
NSLayoutConstraint.activate([
exampleView.widthAnchor.constraint(equalToConstant: 50)
])
复制代码
错误提示以下图所示: spa
若是你想使用 Auto Layout 动态计算、改变视图尺寸的话,你必须将该属性值改成 false 。而后你只需提供无歧义、无冲突的约束便可。如例 1-3 代码所示:code
例 1-3 属性值为 falsecdn
// 布局效果等同于 例 1-1
let exampleView = UIView(frame: .zero)
exampleView.backgroundColor = UIColor.green
view.addSubview(exampleView)
// 使用 Auto Layout 时,务必将此属性值设为 false
exampleView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
exampleView.topAnchor.constraint(equalTo: view.topAnchor, constant: 100),
exampleView.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 100),
exampleView.widthAnchor.constraint(equalToConstant: 100),
exampleView.heightAnchor.constraint(equalToConstant: 100)
])
复制代码
当你代码建立视图时,视图的 translatesAutoresizingMaskIntoConstraints 默认为 true,当你使用 Interface Builder 时,系统会自动将 translatesAutoresizingMaskIntoConstraints 的值设为 false。blog