2015-11-21 46 views
5

我想了解擁抱和壓縮阻力如何真正起作用。嵌套視圖中的擁抱和壓縮阻力

我有這種情況下,我需要兩個標籤左側(綠色容器內)和兩個標籤右側(藍色容器內)。

enter image description here

作爲形象示人,我想綠色容器擁抱的內容(Android的wrap content)和藍色的容器,以填補剩餘的空間(Android的fill_parent)。

我想我可能只是添加擁抱/壓縮優先的綠色觀點,如:

greenView.setContentHuggingPriority(
    UILayoutPriorityDefaultHigh, forAxis: .Horizontal) 
greenView.setContentCompressionResistancePriority(
    UILayoutPriorityDefaultHigh, forAxis: .Horizontal) 

但似乎預期這是行不通的。我必須將這些限制條件應用於(紅色和黃色)標籤。

任何人都知道原因?

的幾點思考(編輯):

從肯的回答可以得出,你必須擁抱設置/壓縮到標籤,而不是容器看法。

在這個問題的例子中,例如,我會設置一個750(高)的擁抱和1000(必需)的阻力到左邊的標籤。由於標籤的默認值爲251(低+ 1)和750(高)的阻力,因此左側標籤(750> 251和1000> 750)的擁抱和壓縮會更大。同時,壓縮會比標籤內的擁抱更大(1000> 750)。

這樣,左側的標籤會嘗試擁抱他們的內容,但不會壓縮它。例如,紅色標籤無法完全包裝其內容,因爲黃色標籤不想壓縮。

唷!

回答

13

內容擁抱和壓縮阻力優先級只與視圖的內在內容大小有關。基本上,如果一個視圖具有固有的內容寬度,然後自動佈局系統把它當作好像它是受到以下限制:

[view(<[email protected])] 
[view(>[email protected])] 

這是所有這些的意思。當然,這同樣適用於固有高度。

用作容器的普通UIView沒有固有尺寸。所以,它的內容擁抱和壓縮抵抗優先級是毫無意義的。肯定。非常好的解釋,

+0

很好的解釋。我從來沒有見過這樣的解釋,而且完全合理。有什麼官方文件證明這一點? –

+0

現在我看到這是[官方文檔](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/#//apple_ref/occ/instm/UIView/setContentHuggingPriority:forAxis :)說。但現在我明白了。謝謝! –

+1

我很高興能幫上忙。您可以找到[概念指南](https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/AutolayoutPG/AnatomyofaConstraint.html#//apple_ref/doc/uid/),而不是查閱課程參考資料。 TP40010853-CH9-SW21)更有幫助。 –