2016-02-19 52 views
1

enter image description here我不明白約束優先

我創建具有下列約束的矩形:

enter image description here

我雖然如果我width >=250999設置優先級來限制,那麼寬度equal == 200將工作在小設備上,並與width >= 250大。

但它沒有奏效。我閱讀文檔:

求解所需的限制後,自動佈局嘗試 解決的優先順序所有可選限制從最高到最低 。如果它無法解決可選約束問題,它會嘗試使 儘可能接近所需結果,然後移動到 下一個約束。

這種不平等,平等和優先權的組合給你 大量的靈活性和權力。通過組合多個 約束,您可以定義動態適應的大小爲 的佈局以及用戶界面中元素的位置發生更改。

+1

如果你有一個約束,說你的寬度應爲200,而約束是必須的,那麼它將永遠是200分寬。我沒有看到您列出的約束條件中的任何內容,這會導致它們約束切換到> = 250約束條件。如果有空間的話,你會想添加一些像前導和尾隨約束這樣的東西,試圖讓這個盒子變得更寬一些。 –

+0

只有當兩個約束衝突時,優先級才成爲平局。因此,您不能只有'width> = 250'的單個約束,並且希望根據設備中視圖的大小增大圖像的大小。您必須添加其他約束條件,以允許自動佈局將新的約束考慮在內。 – CapturedTree

回答

2

的優先級約束將爲了解決兩個不同的約束之間的衝突,可以應用。框架的視圖將被修改,應用更多優先級的約束。因此,您應該有另一個視圖或使用超級視圖將優先級應用於約束。

這是一個很好的答案解釋性的優先級:Link

0

iOS會根據您的說明進行操作。根據屏幕大小,約束不會自動禁用。優先級較高的約束將首先應用。

因此,當iOS需要佈局您的視圖時,它會查找您提供的規範。現在,根據您指定的規格,無論屏幕尺寸如何,視圖的寬度應爲200(最高優先級)。所以這個約束被應用,並且你得到寬度爲200的視圖。

你怎麼能夠做你想要的?

當您的應用程序在大屏幕上運行時,您應該嘗試禁用「width」規範爲200的約束,然後您的其他約束將起作用並給出正確的結果。

禁用/啓用約束 -

Stackoverflow Link

Apple Developer Library