.m ファイルでこれを試してください。
- (void)updateLayoutForNewOrientation:(UIInterfaceOrientation)orientation
{
if (self.interfaceOrientation == UIInterfaceOrientationPortrait || self.interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)
{
// Portrait
[object setFrame:CGRectMake(...)];
// Do the same for the rest of your objects
}
else
{
// Landscape
[object setFrame:CGRectMake(...)];
// Do the same for the rest of your objects
}
}
この関数では、ポートレートとランドスケープの両方について、ビュー内の各オブジェクトの位置を定義しました。
次に、その関数を呼び出して、viewWillAppear
最初に機能させます。ビューは、開始時に使用する方向を決定します。
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self updateLayoutForNewOrientation:self.interfaceOrientation];
}
また、回転するときは:
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration
{
[self updateLayoutForNewOrientation:self.interfaceOrientation];
}
これは、方向に関してよりカスタマイズされた外観が必要な場合に使用するアプローチです。それがうまくいくことを願っています。
編集:
1 つの UIViewController で縦向きと横向きの 2 つの UIView を使用する場合、コードの最初の部分を次のように変更します。
- (void)updateLayoutForNewOrientation:(UIInterfaceOrientation)orientation
{
if (self.interfaceOrientation == UIInterfaceOrientationPortrait || self.interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)
{
// Portrait
portraitView.hidden = NO;
landscapeView.hidden = YES;
}
else
{
// Landscape
portraitView.hidden = YES;
landscapeView.hidden = NO;
}
}
この編集されたサンプルとオリジナルの間には賛否両論があります。オリジナルでは、すべてのオブジェクトに対してコードを作成する必要がありました。この編集済みサンプルでは、必要なのはこのコードだけですが、基本的にオブジェクトを 2 回 (1 つは縦表示用、もう 1 つは横表示用) 割り当てる必要があります。