UIView
6 を含む StoryBoardに を作成しましたUIButtons
。
横向きモードと縦向きモードをサポートするいくつかの制約を記述し、それらを 2 つの異なる配列に配置しました:portraitModeConstraints
とlandscapeModeConstraints
. モードが変更されると、古い制約が削除され、正しい配列が追加されます。
ポートレートモードでビューをロードしても問題はありません。すべての制約は正常に機能しますが、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];