[轉]translatesAutoresizingMaskIntoConstraints詳解


目前在學習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轉化而來:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM