10

So, I want to lock the orientation of my home page to portrait, and the Home page ONLY.

I am using a tab bar controller, so the initial view is the tab controller, but the view controller that appears first is the first tab, e.g. the Home page.

I would like to make it so that when the user goes to rotate the device, it WILL NOT rotate to landscape on this page. However all other pages can rotate.

I have searched around, and nothing seems to be specific to iOS 7, and the one that is specific to iOS 7 doesn't work…</p>

Please help, thank you!

The image below describes what I DON"T want to happen, for this page.

enter image description here

4

4 に答える 4

7

実装で以下を実装します

- (NSUInteger) supportedInterfaceOrientations {

    return UIInterfaceOrientationMaskPortrait;

}

これにより、探している結果が得られるはずです。

于 2013-11-07T03:39:53.947 に答える
6

このコードを使用

@implementation UINavigationController (Rotation_IOS6)

-(BOOL)shouldAutorotate
{

    return UIInterfaceOrientationMaskPortrait;

}

-(NSUInteger)supportedInterfaceOrientations
{

  return UIInterfaceOrientationMaskPortrait;

}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{

 return UIInterfaceOrientationPortrait;

}

@end
于 2013-11-07T07:34:54.767 に答える
0

問題は、あなたが正しく指摘したように、ホームタブが最上位のView Controllerではないことです。

この件に関する私の限られた知識から、次のことしか思い浮かびません。

  1. 別のタブ ビュー コントローラーを作成し、向きを制御するメソッドを実装しshouldAutorotateますsupportedInterfaceOrientations
  2. このコントローラーを起動時の最初のコントローラーにします。
  3. プッシュ セグエを使用して、他のタブを元のタブ コントローラー (すべての向きをサポートするもの) にルーティングします。
于 2014-06-11T15:37:46.230 に答える
0

素敵な解決策を見つけたと思います。私の場合、ストーリーボードで UISplitViewController を rootController として使用していますが、考え方は同じです。

  1. rootController (私の場合は UISplitViewController) をサブクラス化し、shouldAutorotate() コールバックをキャッチして、そこからサブビュー shouldAutorotate を呼び出せるようにします。
  2. 回転をロックしたいビューに shouldAutorotate() を実装する

    class MyUISplitViewController: UISplitViewController {
    override func shouldAutorotate() -> Bool {
        if ((self.viewControllers.last) != nil && (self.viewControllers.last!.topViewController) != nil){
            if (self.viewControllers.last!.topViewController!.respondsToSelector("shouldAutorotate"))
            {
                return self.viewControllers.last!.topViewController!.shouldAutorotate()
            }
        }
        return true
    }
    }
    

サブ UIViewController で

override func shouldAutorotate() -> Bool {
        if (UIDevice.currentDevice().userInterfaceIdiom == .Phone)
        {
            return false
        }else{
            return true
        }
    }

サポートされている向きを確認したい場合は、supportedsupportedInterfaceOrientations()で同じことを行うだけです。

編集:

ストーリーボードのルート viewController に「MyUISplitViewController」クラスを設定することを忘れないでください

于 2015-04-17T09:26:22.327 に答える