3

最初UINavigationController( Navigator) 的子类是根控制器,它支持所有方向。子类覆盖supportedInterfaceOrientations并提供属性来设置支持的方向。

Navigator导航堆栈的根视图控制器(的子类UITableViewContreller)控制支持的方向(取决于哪个视图控制器位于堆栈顶部)。它在覆盖中设置Navigator了方向属性。didSelectRowAtIndexPath

如果在设备处于不同方向时进行转换(因为当前视图不支持它并且这不是假定的交互方式)并且新视图支持该设备方向,则视图保持与设备方向不同的方向。然后需要旋转设备并将其移回以带来正确的方向。

这是如果有人出于某种原因在联系人应用程序中将设备置于横向模式,但突然其中一个子视图将支持横向并自动旋转,而无需将设备旋转到纵向然后横向。问题是如何实施?

4

3 回答 3

1

在每种方法中使用它:

if (([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft) || 
    ([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight)) 
{       

} 
else 
{

}

或检查[[UIScreen mainScreen] bounds]

于 2013-03-14T13:36:25.340 回答
0

我想这是你想要的。

获取设备方向:

[[UIDevice currentDevice] orientation];

要获得视图的当前方向显示:

[UIApplication sharedApplication].statusBarOrientation;
于 2013-03-14T14:12:04.093 回答
0

将此方法添加到 UINavigationController 的子类中:

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
        return;

    if ([UIViewController respondsToSelector:@selector(attemptRotationToDeviceOrientation)]) {
        //present/dismiss viewcontroller in order to activate rotating.
        UIViewController *mVC = [[UIViewController alloc] init];
        [self presentModalViewController:mVC animated:NO];
        [self dismissModalViewControllerAnimated:NO];
    }
}

(在 SF 上找到它,但找不到该问题的链接)

于 2013-03-14T15:48:23.000 回答