2015-06-23 38 views
2

該應用程序有一個簡單的TableView控制器,在左側顯示圖像。 (見第一張照片)。 UIView與x軸對齊,具有領先的空間限制,並且具有最大寬度。我曾認爲這足以防止圖像扭曲超過130像素,但事實並非如此。當設備處於橫向模式時,問題更加明顯。爲什麼AutoLayout忽略一些Contraints?

爲什麼一些約束被忽略(看看視圖調試器屏幕截圖中的一些約束如何變灰),更重要的是,如何使具有固定高度的可變寬度圖像不會在細胞?

Autolayout all blue and not complaining

some of the constraints are being greyed out

in landscape mode the problem is more clearly visible.

+0

您擁有的圖像種類會隨圖像寬度變化而變形。如果你真的想要變化寬度,你也需要爲圖像設置高度變量,或者你有另一種使用AspectFill內容模式的選項。否則,只修復寬度沒有變量。 – iphonic

回答

0

你問了兩個問題,我將seperately回答:

  1. 爲什麼在一些約束被忽略:

實際上他們並沒有被忽略。您尚未爲這些特定區域設置任何約束。當您應用約束時,相應的線將以藍色突出顯示。當你沒有爲特定的一面應用約束時,它仍然是灰色的。

  • 如何可以具有可變寬度的圖像具有固定高度在細胞中不出現失真?
  • 您可以使用AspectFit或AspectFill,讓您的圖像的寬高比不會受到打擾,他們不這樣做看起來拉長。

    您還應該從ImageView中刪除寬度約束。那麼你可以使用AspectFill,如果你知道你的高度不會從130增加。如果你的圖像高度可能超過130,你應該使用AspectFit。

    +0

    兩條垂直線和一條水平線呈灰色。這是否意味着這些約束沒有設置?另外,你如何解讀那條藍色和灰色的線條?如在,哪些行對應於哪些約束,以便您可以系統地將灰線更改爲藍線? – Idr

    +0

    最裏面的兩條線,將矩形平分爲水平中心和垂直中心。 使長方形的四條線顯示前導空間,尾隨空間,頂部空間和底部空間到父視圖。 矩形外的兩條線顯示恆定的寬度(最底部的水平線)和恆定的高度(最左側的垂直線)。 – danialzahid94

    0

    你有矛盾的約束。您將前導空間設置爲超視圖,並將圖像的中心X限制爲超視圖的中心X(具有恆定偏移量)。這兩個足以決定寬度。隨着超級觀點變得更加寬廣,其中心將進一步脫離其領先優勢。因此,圖像視圖的中心也是如此。由於圖像視圖的前緣已固定,因此將其中心向遠處移動會增加其寬度。

    這會與您的顯式寬度約束相沖突。

    我期望記錄不可滿足的約束條件。

    您需要弄清楚如何解決衝突。您可以降低其中一個約束的優先級。您可以簡單地擺脫centerX約束。或者無論你決定。

    +0

    如果XCode是矛盾的而不是藍色,XCode是不是會顯示約束條件? – Idr

    +0

    僅當它們實際上與布面上的佈局矛盾時。 Xcode不會調用*潛在的*矛盾的約束。 –