あいまいなレイアウト


あいまいなレイアウトは、制約のシステムに 2 つ以上の有効な解決策がある場合に発生します。主な原因は 2 つあります。


あいまいなレイアウトの検出


満たされないレイアウトと同様に、Interface Builder は設計時に、あいまいなレイアウトを検出し、修正する提案を提供できます。これらのあいまいさは、問題ナビゲータの警告、ドキュメントのアウトラインのエラー、キャンバス内の赤い線として表示されます。詳細については、満たされない制約の特定 を参照してください。


満たされないレイアウトと同様に、Interface Builder はすべての可能なあいまいさを検出することはできません。多くのエラーは、テストによってのみ見つけることができます。


実行時にあいまいなレイアウトが発生した場合、自動レイアウトは使用可能な解決策の 1 つを選択します。つまり、レイアウトは期待どおりに表示される場合とされない場合があるという意味です。さらに、コンソールには警告が表示されず、あいまいなレイアウトにブレークポイントを設定する方法もありません。


その結果、あいまいなレイアウトは、満たされないレイアウトよりも検出と識別が困難になることがよくあります。あいまいさが明白で目に見える影響を与える場合でも、エラーがあいまいさによるものか、レイアウト論理のエラーによるものかを判断するのは難しい場合があります。


幸い、あいまいなレイアウトを特定するために呼び出すことができるメソッドがいくつかあります。これらのメソッドはすべて、デバッグにのみ使用してください。ビュー階層にアクセスできる場所にブレークポイントを設定し、コンソールから以下のいずれかのメソッドを呼び出します。


これらのコマンドをコンソールで実行するときは、Objective-C 構文を使用する必要がある事があります。たとえば、ブレークポイントが実行を停止した後、コンソールウィンドウに call [self.myView exerciseAmbiguityInLayout] と入力し、exerciseAmbiguityInLayout メソッドを、myView オブジェクト上で呼び出します。同様に、po [self.myView autolayoutTrace] と入力して、myView を含むビュー階層に関する診断情報を出力します。


注意:

上記の診断メソッドを実行する前に、Interface Builder で見つかった問題を全て必ず修正してください。Interface Builder は、検出した全てのエラーの修復を試みます。つまり、あいまいなレイアウトが見つかると、制約が追加され、レイアウトがあいまいでなくなります。


その結果、hasAmbiguousLayoutNO を返します。exerciseAmbiguityInLayout は効果がないように見え、constraintsAffectingLayoutForAxis: は追加の予期しない制約を返します。




前:満たされないレイアウト 次:論理的なエラー
































































目次
Xcode の新機能

  • 始めましょう

  • 自動レイアウトガイド全メニュー

  • 自動レイアウトレシピ集

  • 自動レイアウトのデバッグ

  • エラーの型
  • 満たされないレイアウト
  • あいまいなレイアウト
  • あいまいなレイアウトの検出
  • 論理的なエラー
  • デバッグの秘訣とヒント

  • 高度な自動レイアウト

  • 付録

  • 改訂記録











  • トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ









    トップへ