咱們查看官方文檔,能夠看到文檔是這樣介紹該屬性的:它是一個用來決定,是否將視圖的自動調整大小的遮罩(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