我在iOS 8上遇到VFL約束問題,而在6和7上,這一切都可以。這是約束:iOS 8自動佈局,VFL和保證金等於或大於
H:|-margin-[_imageView]-(=>margin)-[_label]-margin-|
兩個_imageView_
和_label
得到他們正確的固有寬度和幅度的增長預期。我想實現
|-[_imageView]-------------------------------[some text]-|
|-[_imageView]---------------------------[a larger text]-|
|-[_imageView]-----------------------[a very large text]-|
|-[_imageView]-[a very very very very very very larg...]-|
這是正常視覺,但它提出了一個破碎的約束例外:
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x7b856ee0 H:[UIImageView:0x7b8ef1f0]-(>=12)-[UILabel:0x7b8e7c60'Test']>
有印刷_autolayoutTrace
後無歧義。
但是,如果約束只涉及標籤有沒有問題:
H:|-margin-[_label1]-(=>margin)-[_label2]-margin-|
問題可能之後的下一個步驟來解決:
改變約束消除>=
和增加重點:
H:|-margin-[_imageView]-([email protected])-[_label]-margin-|
設置擁抱優先級_imageView
[_imageView setContentHuggingPriority:UILayoutPriorityDefaultHigh forAxis:UILayoutConstraintAxisHorizontal];
設置的_label
[_label setContentCompressionResistancePriority:UILayoutPriorityDefaultLow forAxis:UILayoutConstraintAxisHorizontal];
有了這些規則的抗壓性有任何平臺上沒有問題。所有這些都需要iOS 8嗎?這是一個錯誤還是我做錯了?
謝謝。
我的猜測是破碎的約束來自有太長的文本字符串來兌現「> = 12」;即邊距+圖像+文本的寬度超過了父視圖的寬度。確實,iOS 8引入了佈局邊距,但我對VFL語句如何受到任何幫助的影響還不夠了解。您可以將標籤的行高設置爲0,以便它可以垂直擴展並仍然保持水平約束? – NRitH 2014-09-26 05:07:47
@NRitH無論文本的長度如何,約束總是被打破。我無法更改標籤的行數,文本必須被截斷。 – emenegro 2014-09-26 06:37:14
你可以發佈一個完整的日誌和一個堆棧跟蹤,當它抱怨破碎的約束?如果您不設置內容擁抱優先級和標籤的抗壓縮性會發生什麼? – 2014-09-29 10:23:59