web-dev-qa-db-ja.com

leftAnchorとleadingAnchorの違いは?

私はiOSでSwiftの制約を使用しており、ほとんどの命名規則/ドキュメントは物事を自明にしますが、最近私を混乱させた1つのことはNSLayoutXAxisAnchorクラスの2つのペアです:

leadingAnchor, leftAnchor

に加えて

trailingAnchor, rightAnchor

IOSアプリで制約をプログラムで設定すると、これらをまったく同じように使用できることがわかりました。 leadingAnchorを使用し、アプリを実行して動作を観察し、次にleftAnchorを使用してアプリを実行して動作を観察すると、まったく同じように機能します。

Developer.Apple.comからドキュメントをチェックアウトしましたが、結果はまったく同じです(名前の違いは無視しています)。たとえば、leadingAnchorとleftAnchorの比較:

「このアンカーを使用して、ビューのリーディングエッジで制約を作成します。このアンカーはNSLayoutXAxisAnchorアンカーのサブセットとのみ組み合わせることができます。leadingAnchorを別のleadingAnchor、trailingAnchor、またはcenterXAnchorと組み合わせることができます。参照。"

と比較:

「このアンカーを使用して、ビューの左端に制約を作成します。このアンカーは、NSLayoutXAxisAnchorアンカーのサブセットとのみ組み合わせることができます。leftAnchorは、別のleftAnchor、rightAnchor、centerXAnchorと組み合わせることができます。詳細については、NSLayoutAnchorクラス参照。"

これらのプロパティ間に意図した違いがあるかどうかは誰にもわかりますか?

97
Michael Fourre

これはMylayies of AutolayoutのWWDC 2015ビデオの1つで(簡単に)取り上げられました(パート1だったと思いますが、両方とも見る価値があります)。

左と右の制約は絶対的であり、常に画面またはコントロールの左/右を参照します。先頭および末尾の制約は、デバイスロケールの影響を受けます。読み取り方向が左から右(英語、フランス語、スペイン語など)のロケールでは、先頭と左側(および末尾と右側)を同じように使用できます。読み取り方向が右から左のロケール(ヘブライ語、アラビア語など)では、「先頭」が右側になり、「末尾」が左側になります。

ビデオのアドバイスは、絶対的な左/右の特定の要件がない限り、ほとんど常に左/右ではなく先行/末尾を使用する必要があるというものでした。

ラベルとテキストフィールドの典型的な「フォーム」を検討してください。先頭/末尾の制約を使用する場合、英語ロケールの場合は左側にラベルが、右側にテキストフィールドが、ヘブライ語ロケールの場合は左側にテキストフィールドが表示されます。

右から左に教える子供向けアプリを作成し、always画面の左側に「左」ボタンが必要な場合は、左/右の制約が適切です

214
Paulw11