12

私のアプリは自動回転できますが、ビューの 1 つを縦向きモードでのみ表示する必要があり、これを実現する方法がわかりません。私はこれを(とりわけ)試しましたが、問題のビューはまだ回転しています:

-(BOOL)shouldAutorotate
{            
    return NO;
}

 - (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}
4

2 に答える 2

15

このソリューションでは、ナビゲーション コントローラーによって管理されている場合に、個々のビュー コントローラーで向きを制御する方法について説明します。

Xcode 5 で、「Objective-C カテゴリ」タイプの新しいファイルを作成し、その「カテゴリ」を「回転」に設定し、「UINavigationController」を「カテゴリ オン」として選択します。

次の名前を持つ新しいファイル カップルがプロジェクトに表示されます。 UINavigationController+rotation.h UINavigationController+rotation.m

.m ファイルに次のコードを記述します。

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

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

このようにして、ナビゲーション コントローラーは現在のトップ ビュー コントローラーに方向ポリシーを決定させます。

次に、ナビゲーション コントローラーによって管理される特定のビュー コントローラーごとに、向きに関連する 2 つのメソッドをオーバーライドできます。

たとえば、特定のビュー コントローラが縦向きでのみ表示される場合:

- (BOOL) shouldAutorotate
{            
    return NO;
}

 - (NSUInteger) supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

目的の方向が、プロジェクトの配置情報で設定されている方向のいずれかであることを確認してください。これが十分に詳細であり、役立つことを願っています。

于 2014-02-04T17:07:02.543 に答える
6

supportedInterfaceOrientationsView ControllerをモーダルView Controllerとして提示すると機能します。ナビゲーション コントローラー スタックの一部として提示すると機能しません。ビューをモーダルに表示したいが、ナビゲーション コントローラー内に表示したい場合 (たとえば、ナビゲーション アイテムを含めるため)、私が行った解決策は、サブクラスUINavigationControllerのメソッドをサブクラス化し、オーバーライドすることでしたsupportedInterfaceOrientations

于 2013-10-26T00:07:57.453 に答える