leftAnchorとLeadingAnchorの違いは何ですか?


119

私はSwift for iOSで制約を扱っており、ほとんどの命名規則/ドキュメントは非常に自明ですが、最近私を混乱させたのは、NSLayoutXAxisAnchorクラスの2つのペアです。

leadingAnchor, leftAnchor

に加えて

trailingAnchor, rightAnchor

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

developer.apple.comからドキュメントをチェックアウトしたところ、結果はまったく同じです(名前の違いは無視しています)。たとえば、leadingAnchorとleftAnchorを比較すると、次のようになります。

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

次と比較:

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

これらのプロパティ間に意図された違いがあるかどうか誰かが知っていますか?

回答:


272

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

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

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

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

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


9
すばらしい情報、返信ありがとうございます。私がビデオを見たなら、私は自分でこれを知っていただろう!これを承認済みの回答としてマークします。ありがとうございました
マイケルフォーレ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.