2016-07-04 14 views
0

AutolayoutとiOS 9.3をターゲットにして、Xcode 7で作業しています。私は、コンテナビューを保持するメインビューコントローラを持っています。コンテナビューには、子ビューコントローラがあります。Swift:Container回転して再び回転するとレイアウトが変わる

それが水平に完全にメインビューコントローラを覆うようにコンテナビューは、-20の先頭と末尾の制約があります。

ただし、メインビューコントローラが最初に読み込まれるとき、コンテナ内に表示される子ビューコントローラからのコンテンツは、左と右でわずかに切り取られます(ほぼ制約が認識されないかのように)左と右に-20の)。

私は子供ビューコントローラが突然正しくスケールし、もはや左右に遮断され、元の縦向きに再び戻って、その後景観にデバイスを回転させると。

は、だから、横向きに回転装置と、ビューが最初にロードされたときに呼び出されませんので、再び戻ってそれを回転させたときに呼び出されているいくつかのレイアウト方法のように見えます。これはどのような方法ですか?このメソッドを手動で呼び出して、レイアウトとサイズの更新を強制的に実行して、子を最初にロードしたときに、回転と後退と同じように見えるようにする方法はありますか?

+0

コードを表示してください。このような状況では、私のオートレイアウトの経験から、あなたのコードが犯人であると疑う必要があります。そのため、ほとんどの場合、あなたの制約設定はあなたが思うものではなく、コードを見ずにもっと言い表すことはできません。 – lawicko

+0

ビューに対して 'layoutIfNeeded()'を呼び出して、レイアウトの更新をトリガすることができます。あなたが探しているメソッドに関して:回転メソッドを使用していないと仮定すると、向きの変更によってトリガされるメソッドは 'viewWillTransitionToSize:' – sketchyTech

+0

になります。Container ViewのviewDidAppearメソッド内でlayoutIfNeeded()を呼び出そうとしました。私はまた、Child View ControllerのviewDidAppearメソッドでそれを呼び出そうとしましたが、これは効果がありません。 – Stanley

答えて

0

まず、-20のマージンを設定する必要はありません。コンテナビューの各側の0マージンは、子ビューをメインコンテナビューから広げるのに十分です。私はあなたのアイデアを試しましたが、問題はありません。プロジェクトは下のgithubのリンクからダウンロードできます。

The link

0

私はこの問題への解決策を見つけた:

代わりにコンテナビューの先頭と末尾-20の制約を設定するので、私は同じ幅のコンテナビューに制約を設定しますメインビューとして使用し、コンテナ内に水平に配置します。これは、元の制約のために異なる動作をする理由私は非常に説明することはできませんが、それは最初の負荷で動作し、これらの制約に

。 Autolayoutでは、コンテナのサイジングの1つの方法が特定の状況下で扱いにくい場合、同じ結果を達成するために別の制約条件を試してみると教訓があると思います。

+0

stanley、私はアプリを使用している間、コンテナに問題があります.. [リンク](http://stackoverflow.com/questions/38008852/uipageviewcontroller-within-a-containerview-is-not-working-properly)。これはlink.pleaseちょっと見てみましょうです。 –

関連する問題