目前在學習AutoLayout的相關知識,看到有些UIView需要設置這個屬性,在網上看到這篇文章做得很詳細,做個轉載昨晚筆記,侵刪請聯系
原文傳送門:https://www.jianshu.com/p/d67395deb694
translatesAutoresizingMaskIntoConstraints
- 把 autoresizingMask 轉換為 Constraints
- 即:可以把 frame ,bouds,center 方式布局的視圖自動轉化為約束形式。(此時該視圖上約束已經足夠 不需要手動去添加別的約束)
- 用代碼創建的所有view , translatesAutoresizingMaskIntoConstraints 默認是 YES
- 用 IB 創建的所有 view ,translatesAutoresizingMaskIntoConstraints 默認是
NO(autoresize 布局:YES , autolayout布局 :NO)
如何設置 translatesAutoresizingMaskIntoConstraints
- 視圖 使用代碼創建,frame 布局 ,不用去管 translatesAutoresizingMaskIntoConstraints
- 視圖 使用代碼創建,autolayout 布局,translatesAutoresizingMaskIntoConstraints 設置為 NO
- 視圖 IB 創建,frame 布局 , translatesAutoresizingMaskIntoConstraints 不用管 (IB 幫我們設置好了:YES)
- 視圖 IB 創建,autolayout 布局,translatesAutoresizingMaskIntoConstraints 不用管 (IB 幫我們設置好了,NO)
為什么 translatesAutoresizingMaskIntoConstraints 使用約束布局時候,就要設置為 NO?
translatesAutoresizingMaskIntoConstraints 的本意是將 frame 布局 自動轉化為 約束布局,轉化的結果是為這個視圖自動添加所有需要的約束,如果我們這時給視圖添加自己創建的約束就一定會約束沖突。
為了避免上面說的約束沖突,我們在代碼創建 約束布局 的控件時 直接指定這個視圖不能用frame 布局(即translatesAutoresizingMaskIntoConstraints=NO),可以放心的去使用約束了。
例子:
v1是一個不使用autolayout的view,
v2是一個使用autolayout的view,
但v1成為v2的subview時,
v2需要四條隱含的constraint來確定v1的位置,這些約束都是從v1的frame轉化而來:
