2013-12-13 148 views
3

我有了很多子視圖的觀點,我將把這些意見,上海華盈,子視圖,子視圖B,子視圖C等訪問自動佈局約束編程

所以我需要訪問尾隨空間約束我設置在子視圖A上來查看和修改它。這個約束會出現在superview.constraints中。

但是,所有子視圖都在它們和超級視圖之間設置了前/後空格約束。

所以,如果我登錄superview.constraints,它應該是這樣的:

<__NSArrayM 0xac744e0>(
<NSLayoutConstraint:0x98f3500 H:|-(0)-[UILabel:0x98f2190] (Names:  '|':HeaderReusableView:0x98f1f40)>, 
<NSLayoutConstraint:0x98f3540 H:[UILabel:0x98f2190]-(20)-| (Names: '|':HeaderReusableView:0x98f1f40)>, 
<NSLayoutConstraint:0x98f3580 V:[UILabel:0x98f2190]-(-4)-| (Names: '|':HeaderReusableView:0x98f1f40)>, 
<NSLayoutConstraint:0x98f35c0 V:[UIView:0x98f2770]-(42)-| (Names: '|':HeaderReusableView:0x98f1f40)>, 
<NSLayoutConstraint:0x98f3600 H:[UIView:0x98f2770]-(20)-| (Names: '|':HeaderReusableView:0x98f1f40)>, 
<NSLayoutConstraint:0x98f3640 H:|-(0)-[UIView:0x98f2770] (Names: '|':HeaderReusableView:0x98f1f40)>, 
<NSLayoutConstraint:0x98f3680 H:|-(0)-[UIView:0x98f2610] (Names: '|':HeaderReusableView:0x98f1f40)>, 
<NSLayoutConstraint:0x98f36c0 H:[UIView:0x98f2610]-(0)-| (Names: '|':HeaderReusableView:0x98f1f40)>, 
<NSLayoutConstraint:0x98f3700 V:[UIView:0x98f2610]-(1)-| (Names: '|':HeaderReusableView:0x98f1f40)>, 
<NSLayoutConstraint:0x98f3740 V:[UIView:0x98f2920]-(107)-| (Names: '|':HeaderReusableView:0x98f1f40)>, 
<NSLayoutConstraint:0x98f3780 H:[UIView:0x98f2920]-(20)-| (Names: '|':HeaderReusableView:0x98f1f40)>, 
<NSLayoutConstraint:0x98f37c0 H:|-(0)-[UIView:0x98f2920] (Names: '|':HeaderReusableView:0x98f1f40)>, 
<NSLayoutConstraint:0x98f3800 H:[UIButton:0x98f19c0]-(178)-| (Names: '|':HeaderReusableView:0x98f1f40)>, 
<NSLayoutConstraint:0x98f3840 V:[UIButton:0x98f19c0]-(55)-| (Names: '|':HeaderReusableView:0x98f1f40)>, 
<NSLayoutConstraint:0x98f3880 H:|-(0)-[UILabel:0x98f2a80] (Names: '|':HeaderReusableView:0x98f1f40)>, 
<NSLayoutConstraint:0x98f38c0 V:[UILabel:0x98f2a80]-(109)-| (Names: '|':HeaderReusableView:0x98f1f40)>, 
<NSLayoutConstraint:0x98f3900 H:[UILabel:0x98f2a80]-(20)-| (Names: '|':HeaderReusableView:0x98f1f40)>, 
<NSLayoutConstraint:0x98f3940 H:|-(171)-[UIButton:0x98f2ff0] (Names: '|':HeaderReusableView:0x98f1f40)>, 
<NSLayoutConstraint:0x98f3980 V:[UIButton:0x98f2ff0]-(55)-| (Names: '|':HeaderReusableView:0x98f1f40)> 

我不知道它的限制是一個我想要的。

+0

好吧,我明白了。 NSLayoutConstraint有一個名爲firstItem的屬性和一個屬性secondItem。這些是限制條件的觀點。 通常secondItem是視圖本身。因此,view.constraints [0] .secondItem是視圖。 – nyus2006

回答

7

好吧我想通了。 NSLayoutConstraint有一個名爲firstItem的屬性和一個屬性secondItem。這些是限制條件的觀點。

通常secondItem是視圖本身。因此,view.constraints [0] .secondItem是視圖。

+0

取決於。如果你有一個頂級前導的子視圖與一個超級視圖對齊,那麼子視圖通常是第一個用於頂部和前導約束的項目,而另一個方式則是底部和尾部約束。 – Ruiz

6

使IBOutlet成爲您感興趣的人。您可以使用畫布中的約束(有時很難做到)或左邊場景列表中的約束列表創建這些約束。

+1

謝謝你的回答。我知道如何用IB來做,不知道如何以編程的方式做到這一點。因爲我的問題的標題建議:) – nyus2006

+0

這當然只適用於你只需要修改其中一個子視圖。如果有不明數量的子視圖需要更改約束,則必須繼承您正在使用的UIView(button?label?cell?),爲其添加屬性並在約束條件設置時設置它創建。 –

0

的其他方式和輕鬆的一年對我來說是爲Ctrl +拖動約束的出路ViewController.m或ViewController.h文件,您可以設置/得到它的恆定,優先級,第一項,第二項等