簡體   English   中英

使用自動布局時視圖沒有約束時會發生什么?

[英]What happens when a view has no constraints when using Auto Layout?

在瀏覽Auto Layout的文檔時,我想知道當視圖沒有約束時會發生什么。 自動布局系統是否自動向視圖添加約束,或者系統是否使用自動清除掩碼?

當視圖沒有任何約束時,Xcode會在Size Inspector中告訴您,在構建時,會為視圖生成顯式左,頂,寬和高度約束。 但是,當我在視圖控制器的viewDidAppear:方法中記錄視圖的約束時, constraints數組為空。 我在俯瞰什么?

您記錄了什么,以及您在故事板中添加了什么? 如果我將標簽拖入控制器然后在viewDidAppear中記錄self.view.constraints ,我明白了,

2014-05-21 22:07:44.114 blah029347[3743:60b] (
    "<NSIBPrototypingLayoutConstraint:0x8d33f50 'IB auto generated at build time for view with fixed frame' H:|-(95)-[UILabel:0x8d32470](LTR)   (Names: '|':UIView:0x8d32290 )>",
    "<NSIBPrototypingLayoutConstraint:0x8d34230 'IB auto generated at build time for view with fixed frame' V:|-(177)-[UILabel:0x8d32470]   (Names: '|':UIView:0x8d32290 )>",
    "<NSIBPrototypingLayoutConstraint:0x8d342e0 'IB auto generated at build time for view with fixed frame' H:[UILabel:0x8d32470(42)]>",
    "<NSIBPrototypingLayoutConstraint:0x8d34310 'IB auto generated at build time for view with fixed frame' V:[UILabel:0x8d32470(21)]>",
    "<_UILayoutSupportConstraint:0x8d33cc0 V:[_UILayoutGuide:0x8d33460(0)]>",
    "<_UILayoutSupportConstraint:0x8d31690 V:|-(0)-[_UILayoutGuide:0x8d33460]   (Names: '|':UIView:0x8d32290 )>",
    "<_UILayoutSupportConstraint:0x8d31700 V:[_UILayoutGuide:0x8d338d0(0)]>",
    "<_UILayoutSupportConstraint:0x8d34340 _UILayoutGuide:0x8d338d0.bottom == UIView:0x8d32290.bottom>"
)

因此,正如您所看到的,系統確實添加了約束。

如果視圖沒有任何約束,那么將根據自動調整掩碼為您生成它們。 如果添加視圖並將其translatesAutoResizingMaskIntoContraints屬性設置為NO,那么您將獲得視圖的隨機位置。 沒有任何約束可以滿足,那么它的框架的任何值都可以工作。

如果您根本不提供任何約束,Xcode會自動分配一組默認約束,稱為自動約束 它是在構建應用程序的編譯時執行此操作,而不是在設計時執行此操作。 在設計用戶界面時,Xcode 5中的自動布局很難避免。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM