4

私のアプリケーション ウィンドウのルート ビュー コントローラーは、サブクラス化された UINavigationController です。このコードをクラスに追加しました:

- (BOOL)shouldAutorotate
{
    return [self.topViewController shouldAutorotate];
}

- (NSUInteger)supportedInterfaceOrientations
{
    return [self.topViewController supportedInterfaceOrientations];
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return [self.topViewController preferredInterfaceOrientationForPresentation];
}

ルート UIViewController に、次のコードを追加しました。

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationPortrait;
}

- (BOOL)shouldAutorotate
{
    return NO;
}

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationPortrait;
}

このビュー コントローラーでデバイスを横向きに回転すると、モーダル ビュー コントローラーが表示されます。デバイスが回転して縦向きに戻ると、モーダル ビューを閉じる必要がありますが、そうすると次のエラーが発生します。

'preferredInterfaceOrientationForPresentation must return a supported interface orientation!'

このエラーが発生するのはなぜですか?


ルート UIViewController の shouldAutorotate から YES を返そうとしましたが、「サポートされている向きにはアプリケーションと共通の向きがありません。また、shouldAutorotate が YES を返しています」というエラーが表示されます。UIInterfaceOrientationPortrait はアプリケーションでサポートされている向きの 1 つであるため、これは私には意味がありません。

4

1 に答える 1

14

では、ではなく-supportedInterfaceOrientationsから値を返す必要があります。特に、あなたが望むように見えますUIInterfaceOrientationMaskUIInterfaceOrientationUIInterfaceOrientationMaskPortrait

-supportedInterfaceOrientations のドキュメントには、戻り値について次のように記載されています。

戻り値

サポートされる方向を指定するビット マスク。有効なビットマスク値については、「UIInterfaceOrientationMask」を参照してください。このメソッドによって返される値は 0 であってはなりません。

于 2012-12-03T19:42:56.517 に答える