2016-04-22 57 views
1

我使用自動佈局編程很多,但仍有兩件事我不明白。自動佈局:瞭解屬性和項目的行爲

  1. 是什麼leadingleft屬性/錨和trailing之間right屬性/錨之間的區別?

對我來說似乎那裏是相同的,但根據docs

然而,自動佈局不允許約束組合前緣和後緣與左邊或右邊的屬性的屬性。結果,這個約束在運行時崩潰。

  • 該項目的NSLayoutConstraint內的順序自動佈局系統都無所謂,是嗎? (至少對於.Equal關係。)
  • 不要對每個單獨項目的屬性感到困惑,我意識到這一點。

    回答

    2

    左右總是左右。

    前導和尾隨不是。從Working with Constraints in Interface Builder

    如果你奠定了開頭和結尾使用限制您的看法,意見左到右的語言(如英語)和從右到左的語言之間進行切換時(如阿拉伯語)自動翻轉位置。但是,一些界面元素不應該根據閱讀方向改變其位置。例如,基於物理方向(上,下,左,右)的按鈕應始終保持相同的相對方向。

    平等關係的項目順序無關緊要。

    +0

    您也可以使用['semanticContentAttribute'](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/index.html#//apple_ref/occ/instp/UIView/semanticContentAttribute )來自定義某些視圖組的行爲,同時仍然使用前導/尾隨 –

    +0

    因此,最好使用'leading'和'trailing'屬性/錨而不是'left'和'right',因爲'semanticContentAttribute'會翻轉如果需要查看?想象一下VFL就像這樣'H:| - [someView] - [label] - |',如果我們的'label'將使用'leadingAnchor'和'trailingAnchor'作爲VFL,那麼從右到左的語言會發生什麼? 'someView.trailing = label.leading'永遠不會改變,但標籤仍然會翻轉? – DevAndArtist

    +0

    如果你另外可以提供一個小例子(不是實際的代碼),那將會很好。 – DevAndArtist

    2

    當考慮RTL語言(如希伯來語)時,leadingleft之間的差異很重要。在這種情況下,UI將被顛倒以補充文本方向,並且帶有約束的UI元素也是如此。在這種情況下,leading意味着文字開始的一面。對於文本方向不可知的用戶界面(例如媒體播放控件),始終保留left

    訂單約束放在哪裏並不重要。如果存在衝突的約束,則行爲未定義。

    +0

    謝謝,這解決了我很多頭痛問題。 – DevAndArtist