Inder Kumar Rathoreの提案がうまくいけば、それは素晴らしいことです。しかし、ドキュメントでは、orientationプロパティが読み取り専用であると説明されているため、それが機能する場合、将来的に機能することを信頼できるかどうかはわかりません(Appleが賢明なことをしてこれを変更しない限り、方法に関係なく、方向の変更を強制しますユーザーは現在デバイスを持っていますが、これは明らかな機能上の必要性です)。
別の方法として、viewDidLoadに挿入された次のコードは、正常に(そしてやや不思議なことに)方向を強制します(roronoa zorroが推奨するようにshouldAutorotateToInterfaceOrientationを既に変更していると仮定します)。
if (UIDeviceOrientationIsPortrait([[UIDevice currentDevice] orientation]))
{
UIWindow *window = [[UIApplication sharedApplication] keyWindow];
UIView *view = [window.subviews objectAtIndex:0];
[view removeFromSuperview];
[window addSubview:view];
}
明らかに、これは、ユーザーが現在デバイスを縦向きに保持している場合に行われます(したがって、shouldAutorotateToInterfaceOrientationは横向きのみに設定されており、ユーザーがデバイスを縦向きモードに保持している場合、このルーチンは横向きにシフトします)。shouldAutorotateToInterfaceOirentationが縦向きのみに設定されている場合は、UIDeviceOrientationIsPortraitをUIDeviceOrientationIsLandscapeと交換するだけです。
何らかの理由で、メインウィンドウからビューを削除してから再度追加すると、shouldAutorotateToInterfaceOrientationにクエリが実行され、方向が正しく設定されます。これがAppleが承認したアプローチではないことを考えると、おそらくそれを使用することを控えるべきですが、それは私にとってはうまくいきます。あなたのマイレージは異なる場合があります。しかし、このSOの議論は、他の手法にも言及しています。