2013-12-09 46 views
1

在使用類似於自動佈局約束的概念的機械CAD軟件中,通常可以添加「派生約束」。這對佈局沒有影響,但可以讓您直接讀取重要維度的值。您可以使用自動佈局添加派生約束嗎?

例如,考慮對一個視圖如下的佈局有兩個子視圖:

 32  64 
    |------| |------| 

|-[imgOne]-[imgTwo]-| 

|-------------------| 
      w 

視圖的寬度爲在左側和右側,圖像視圖之間的默認間隔的默認邊緣間隔的總和,以及應用於圖像視圖的兩個寬度約束(32和64)。

我想在運行時知道w

理論上,這應該是view.bounds。但是,讀取該屬性並不總是安全的(因爲視圖可能尚未更新其佈局約束)。

是否可以添加一個約束,該約束對視圖大小沒有影響,但是一旦佈局完成後將更新其.constant屬性?

(我曾嘗試添加一個寬度約束與1優先的觀點,但.constant總是讀,而不是實際值與標稱值。)

回答

0

添加一個「衍生的」約束會把你您開始使用同一個洞 - 等待Auto Layout完成佈置視圖。這是關於時機。使用自動佈局時,讀取視圖的最終幾何圖形的好地方是在您的視圖控制器的viewDidLayoutSubviews方法中。換句話說,閱讀viewDidLayoutSubviews中視圖的邊界。

+0

即使它確實把你放在同一個洞 - 它絕對可以,這取決於它如何實現 - 我仍然希望有一種方法來避免直接訪問邊界,因爲這似乎是一個倒退時*其他所有*就約束而言。 – sapi