如何强制UITabBarController内部视图的水平方向?

时间:2011-07-20 09:17:00

标签: iphone objective-c cocoa-touch uiviewcontroller uitabbarcontroller

我的MainWindow.xib中有一个UITabBarController。

每个选项卡都包含一个UINavigationController,它有一个UITableViewController。

当我按下UITableViewController中的按钮时,我想将视图控制器水平方向推到导航堆栈上。

我在UITableViewController

中覆盖了以下内容
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations.
    return YES;
}

但推出的视图控制器不会以水平方向显示(在XIB中它被定义为横向)。

如何将其推向水平方向?

3 个答案:

答案 0 :(得分:1)

UITabBarControllerUINavigationController的自动调整受到一些限制:

  1. 对于UITabBarController,只有当标签栏中的所有控制器都支持自动旋转时,自动旋转才有效;

  2. 对于UINavigationController,仅当UINavigationController中的rootViewController支持自动旋转时,自动旋转才有效。

  3. 一旦确定满足此条件,那么您可以尝试按下UITableViewController定义其shouldAutorotateToInterfaceOrientation,如下所示:

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

    编辑:

    所有UIViewControllers都应该具有shouldAutorotateToInterfaceOrientation的定义:

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

    除了你想要强制横向的那个,它应该具有上面给出的定义。

    另请查看this thread中的最后一篇文章,以便为UITabBarController正确实现shouldAutorotateToInterfaceOrientation。

答案 1 :(得分:0)

您需要在viewWillAppear方法中更改状态栏方向,并在viewWillDisappear等中恢复,并且在方法中仅返回横向方向

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations.
    return (UIInterfaceOrientationLandscapeRight or UIInterfaceOrientationLandscapeLeft);
}

答案 2 :(得分:0)

你的方法似乎合乎逻辑。但是,您是否在想要仅为横向的推送视图控制器中尝试此操作:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
  return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft ||
          interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}

此方法的想法是为您支持视图控制器的方向返回YES。