1

Autolayoutと、それが私以外のすべての人にとってどのように驚異的に機能しているかを理解するのに苦労しています。問題は、それらが iPad などの 1 つの解像度で機能するようになったときの制約が、iPhone4s などの別の解像度に準拠できず、その結果、競合する制約につながるか、または私が望むようにまったく機能しないことです (たとえば、ボタンは iPad ではテキスト フィールドの近くに表示されますが、iPhone ではそれほど近くには表示されません)。Raywenderlichの Adaptive Layout チュートリアルと、Steven Lipton の Autolayout (Practical AutoLayout) に関する本を読みました。そしてまだ多くの問題に直面しています。私を助けてください。コーディングを完全にやめて僧侶か何かになりたいと思うほどやる気がなくなります... x(

編集

それで、あなたをさらに助けるために、いくつかのスナップショットの助けを借りて、私にとって何がうまくいかないのかを説明します. 私の最初のアイデアは、特定のボタンを押すと CoreAnimation を介して遷移するテキスト フィールドをそれぞれ含む 4 つのビューを表示することでした。ViewController のビューには、背景の画像、戻るボタン、4 つのビュー、進行状況バー、および各ビューを表示するためのボタンがあります。問題は次のとおりです。シミュレーターでは全体のビューが適切に見えますが、xcode のターミナルで競合が見られます。

すべての要素を含む画像:

すべての要素を含む画像

競合のある画像:

競合のある画像

しかし、どういうわけか競合を解決すると、すべてのデバイスで必要に応じて自動レイアウトが機能しなくなります。例えば

競合はありませんが、iPhone4s のテキストフィールドのタップで次のボタンが隠れています:

競合はありませんが、iPhone4s のテキストフィールドのタップで次のボタンが隠れています

iPad の場合と同様に競合がなく、[次へ] ボタンに非常にアクセスしやすくなっています。

競合はなく、[次へ] ボタンは非常にアクセスしやすい

これをすべてのデバイスで同じように一貫して動作させるにはどうすればよいですか。助けてくださいありがとう。

4

3 に答える 3

1

自動レイアウトに関する私の経験から共有したいことはほとんどありません。

  1. 要素を特定の位置 (右側から 20 ポイント、上部から 40 ポイント) に表示する場合は、ストーリーボードでボタンを調整し、末尾と上部の制約を追加する必要があります。Xcode は、要素の高さ/幅を修正するための提案を提供します。ストーリーボードとまったく同じ高さ幅が必要な場合は、要素のサイズを変更するか、高さと幅の制​​約を追加します。
  2. 異なる画面サイズの高さ幅に応じて要素を拡大/縮小する場合は、-leading、-trailing、-top、および bottom 制約を追加します。
  3. 重要:要素 (ボタンなど) (上、下、先頭、末尾) を「固定」すると、これらの制約が他の要素 (他のボタンなど) に対して追加されます。この場合、他の要素に制約があることを確認してください。そうしないと、Xcode で制約が見つからないというエラーが発生します。
  4. Xcode が予期しないサイズになるいくつかの制約を追加するため、Xcode が提案しているように不足している制約を追加しないでください。

今あなたの問題について:キーボードが表示されたら、ビューを上に移動できます(キーボードの高さに対して。この回答は、プログラムで制約を変更せずにこれを達成したい場合に役立ちます。それ以外の場合は、 create および IBOutlet よりも正しく制約を追加した場合最上位要素の top 制約を設定し、その制約の定数からキーボードの高さの定数 (150) を減算します。また、キーボードが消えたときに、その制約の定数にキーボードの高さ (150) を追加する必要があります。

于 2015-12-09T13:50:29.510 に答える
1

理解しておくべきことの 1 つは、画面サイズが大きく異なる場合、AutoLayout がすべての問題を解決するわけではないということです (サイズ クラスを使用するのは面倒だという印象を今でも持っています)。私は通常、同じView Controllerに接続された、電話とタブレット用の2つの異なるxibを使い続けます。そして、可能であれば、iOS 7 のサポートをやめてください。これにより、AutoLayout に関する多くの頭痛の種が取り除かれます。

編集

ぜひ、自動レイアウトを使用してください。私が言ったことは、大きく異なる解像度には 2 つの異なる xib を使用する方がよい場合が多いということですが、もちろん両方で自動レイアウトを使用します。

于 2015-12-09T12:14:21.127 に答える
0

次のボタンがキーボードによって隠されているという問題は、自動レイアウトとは直接関係ありませんが、自動レイアウトはそれを管理するのに役立ちます. 問題は、画面上で使用可能なスペースよりも多くのスペースを使用していることです。

この問題を解決するには、いくつかの方法があります。

  • コンテンツをスクロールビューに埋め込むことができるため、スクロールビューのコンテンツが利用可能な高さを超えた場合、ユーザーは画面を上下にスクロールできます。自動レイアウトはここで役立ちます: スクロール ビューの下部から下部レイアウト ガイドまでの制約を設定し、その制約にアウトレットを追加します。コードで、キーボードの非表示/表示/変更通知を観察し、調整することができます。それに応じてその制約の定数

  • レイアウトを調整して、キーボードが上にあるかどうかに関係なく、何もの位置を変更せずに、キーボードが上にある場合でも常にすべてが見えるようにします。つまり、キーボードが表示されるスペースを使用しないことを意味します

  • キーボードの存在に基づいてレイアウトを動的に調整します。これは、最初のオプションのような制約を他の制約と組み合わせて、その制約が移動したときに物を動かします。

何かを行う前に、さまざまなシナリオで物事をどのように見せたいかを考えてください。次に、この結果が得られる制約を作成します。自動レイアウトは、何をしたいのかを推測することはできません。必要なレイアウトを正確に把握する必要があります。

于 2015-12-09T14:07:37.563 に答える