1

UIView6 を含む StoryBoardに を作成しましたUIButtons
横向きモードと縦向きモードをサポートするいくつかの制約を記述し、それらを 2 つの異なる配列に配置しました:portraitModeConstraintslandscapeModeConstraints. モードが変更されると、古い制約が削除され、正しい配列が追加されます。

ポートレートモードでビューをロードしても問題はありません。すべての制約は正常に機能しますが、iOS シミュレーターをオンにすると、多くの警告が表示されます。しかし、私の制約は機能します。私はそれらをテストしました。問題を起こす制約は、autoResizingMask からの制約です。だから私は自分のView Controllerでそれらをオフにしました

[self.view setTranslatesAutoresizingMaskIntoConstraints:NO];

これは変わりませんでした。少しデバッグしたところ、 と の間setTranslatesAutoresizingMaskIntoConstraints:NOに違いがないsetTranslatesAutoresizingMaskIntoConstraints:YES ことがわかりました。これは本当に奇妙で、この動作を理解できません。ただし、次のように手動で制約を削除しました。

[self.view removeConstraints:self.view.constraints];

これで、制約は縦向きと横向きの両方で完全に機能しました (UIButtons は正しい位置にありました) が、私の背景はUIView黒くなり、背景画像はなくなりました。

編集: デバイスが回転すると、 my の関数viewControllerが呼び出されます:

willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration;

そこで、toInterfaceOrientation横向きか縦向きかを確認します。ポートレートの場合、私はこれを行います:

[self.view removeConstraints:self.landscapeModeConstraints];
[self.view addConstraints:[NSArray arrayWithArray:self.portraitModeConstraints]];
[self.view layoutSubviews];

そして、それが風景のとき、私はこれをします

[self.view removeConstraints:self.portraitModeConstraints];
[self.view addConstraints:[NSArray arrayWithArray:self.landscapeModeConstraints]];
[self.view layoutSubviews];

4

1 に答える 1

1

コントローラーがナビゲーションコントローラーに埋め込まれている場合、同じ問題が発生しself.view.setTranslatesAutoresizingMaskIntoConstraints(false)、ビューが黒くなっています。実際には、transl..... を self.view に設定する理由はありません。サブビューに適用する必要があります。自動レイアウトガイド

于 2014-12-30T14:01:13.837 に答える