iOS应用 - 更改标签栏中的方向

时间:2011-09-10 06:37:44

标签: objective-c ios uitabbarcontroller

在我的应用中,我有一个带有5个按钮的标签栏。应用总数只有纵向,我已正确设置。

我的问题是当我点击标签栏的第二个按钮时,视图通常以纵向显示,但当用户倾斜设备时,我希望特定视图更改为横向。是否可以将标签栏位置更改为横向,并在单击其他按钮时将其全部更改为纵向?

否则,当它倾斜时,我必须在没有标签栏的情况下单独显示景观,我​​该怎么做?

4 个答案:

答案 0 :(得分:0)

因此,为了清楚起见,您希望整个应用程序和纵向的所有视图除了第二个标签栏按钮触发的视图外,您希望它始终显示在Landscape中吗?

如果我没有混淆你的问题,只需将以下代码行放在视图号2的控制器的“viewDidLoad”方法中

self.view.transform = CGAffineTransformMakeRotation(M_PI / 2);

答案 1 :(得分:0)

您可能想要咬紧牙关,让您的项目接受最高级别的多个方向,然后根据UIViewController决定支持哪些方向。这将允许框架为您处理大量工作(总是一个好主意)。

在每个视图的控制器中,覆盖此方法:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

您希望返回YES以查看您希望视图支持的任何方向。

interfaceOrientation参数的四个选项是:

UIInterfaceOrientationPortrait
UIInterfaceOrientationPortraitUpsideDown
UIInterfaceOrientationLandscapeLeft
UIInterfaceOrientationLandscapeRight

因此,对于您的情况,您将希望托管视图和标签栏的视图控制器支持所有方向。这就是函数的外观:

// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations.
    return YES;
}

但是为了获得额外的细节,如果你只想支持Landscape Left和Portrait Upside Down方向,那么函数将如下所示:

// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations.
    return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft) || (interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown);
}

答案 2 :(得分:0)

如果所有选项卡的ViewControllers在shouldAutorotateToInterfaceOrientation返回YES,则UITabBar仅支持旋转。

如果您让“肖像”标签检查它们是否可见(通过

),您可以实现您想要的效果
tabbar.selectedViewController 

或     tabbar.selectedIndex

并且只有在未被选中时才回答“是”。

但是,当用户在横向模式下更改选项卡时,用户体验可能会令人困惑 提出了纵向视图......

答案 3 :(得分:0)

尝试这个w.r.t。:tabbar.selectedViewController

[[UIDevice currentDevice] setOrientation:UIDeviceOrientationLandscapeRight];