5

そのため、他の多くのアプリと同様に、縦向きと横向きの両方のインターフェイスの向きをサポートするビューコントローラーが1つまたは2つしかないという問題に遭遇しました。それ以外の場合は、縦向きのみのアプリです。iOS 6より前はすべて正常に機能していましたが、突然自動回転が機能しなくなりました。ここでのいくつかの素晴らしい質問のおかげで、最初のnavControllerがshouldAutorotateに対する個々のtopViewControllerの設定を返すようにすることで、この問題を解決することができました。

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

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskAll;
}

しかし、私は新しい問題に遭遇しました。ルートVC(viewController A)は自動回転せず、ポートレートのみをサポートする必要があります。navスタックのViewControllerBは、縦向きと横向きをサポートしています。私がviewControllerBにいて、横向きにいて、「戻る」をタッチしてビューをviewControllerAにポップバックする場合...vc Aは横向きに読み込まれますが、これはサポートされていないはずであり、縦向きに回転して戻ることはありません。 vcAのshouldAutorotateはNOに設定されています。

これに対処する方法についてのアイデアは大歓迎です。私の最初の考えは、ビューが横向きの場合、最初に強制的に縦向きに回転して戻す手動の方法でvc Bの「戻る」ボタンをオーバーライドすることでした...次に、ビューコントローラーをvcAに戻します...プログラムでローテーションを強制します。何か案は?

vcAのインターフェースメソッドは次のとおりです。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return NO;
}

-(BOOL)shouldAutorotate
{
    return NO;
}

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationPortrait;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return UIInterfaceOrientationPortrait;
}

そしてここに彼らがvcBにあるものがあります:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return YES;
}

-(BOOL)shouldAutorotate
{
    return YES;
}

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskAllButUpsideDown;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return UIInterfaceOrientationPortrait;
}
4

2 に答える 2

1

vcA セット内

-(BOOL)shouldAutorotate
{
  return YES;
}

しかし、キープ

-(NSUInteger)supportedInterfaceOrientations
{
  return UIInterfaceOrientationPortrait;
}

次に、vcB から戻ると、ビューはサポートされている (唯一の) 向きに戻ります。

于 2012-11-07T11:35:24.937 に答える
0

問題は、すべてのコンテナー ビュー コントローラー (タブ バー コントローラー、ナビゲーション コントローラーなど) が、plist ファイルで指定したすべてのインターフェイスの向きをサポートしていることです。システムがサポートされているインターフェイスの向きを要求すると、ルート ビュー コントローラーの設定とメソッドの実装が子の設定をオーバーライドします。

この場合、Navigation Controller は横向きと縦向きの両方をサポートし、B View Controller がポップすると、システムは A のインターフェイスの向きを要求しますが、ルート View Controller も要求し、それが「勝者」になります。 A が縦向きのみをサポートしているにもかかわらず、横向きのままです。

1 つの解決策は、ルート ビュー コントローラーをサブクラス化し、必要に応じてその回転メソッドを動的に変更することです。縦置きのみが必要な場合、ルートの実装は縦置きのみを返す必要があり、両方の向きが利用可能な場合、ルートは両方を返す必要があります。

于 2013-04-12T19:43:31.977 に答える