1. ホーム
  2. ios

[解決済み] leftAnchorとleadingAnchorの違い?

2022-06-03 22:30:49

質問

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

leadingAnchor, leftAnchor

とともに

trailingAnchor, rightAnchor

iOSアプリでプログラム的に制約を設定したとき、私はこれらを全く互換的に使用できることを発見しました。leadingAnchor を使用してアプリを実行し、動作を観察し、次に leftAnchor を使用してアプリを実行し、動作を観察すると、まったく同じように機能します。

developer.apple.com のドキュメントをチェックしてみましたが、結果は (名前の違いは無視して) まったく同じでさえあります。たとえば、leadingAnchor と leftAnchor を比較しています。

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

と比較します。

<ブロッククオート

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

これらのプロパティの間に意図した違いがあるかどうか、どなたかご存知でしょうか?

どのように解決するのですか?

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

左と右の制約は絶対的なもので、常に画面またはコントロールの左と右を参照します。 リーディングおよびトレーリング制約は、デバイスのロケールの影響を受けます。読む方向が左から右であるロケール (英語、フランス語、スペイン語など) では、リーディング & left (およびトレーリング & right) は交換可能に使用されます。 読む方向が右から左になるロケール(ヘブライ語やアラビア語など)では、「leading」は右側になり、「trailing」は左側になります。

ビデオでのアドバイスは、絶対的な左/右という特別な要件がない限り、ほとんどの場合、左/右ではなく、leading/trailing を使用すべきであるというものでした。

ラベルとテキスト フィールドの典型的な「フォーム」を考えてみましょう。 リーディング/トレーリング制約を使用すると、英語ロケールではラベルが左、テキスト フィールドが右になり、ヘブライ語ロケールではラベルが右、テキスト フィールドが左になります。

右から左へ教える子供向けアプリを作成した場合、次のようになります。 常に を画面の左側に表示させたい場合、left/right 制約が適切でしょう。