允许在以模式方式显示的以编程方式创建的视图内自动旋转

Posted

技术标签:

【中文标题】允许在以模式方式显示的以编程方式创建的视图内自动旋转【英文标题】:Allowing autorotation inside a programmatically created view that is displayed modally 【发布时间】:2011-06-08 18:11:22 【问题描述】:

这个网站上已经问了十几次了,但我还没有找到适合我的答案。我有一个 iPad 应用程序,它在以编程方式创建的根级别上有一个 UISplitViewController。在右侧窗格中显示的视图中,由用户交互触发,UINavigationController 以编程方式创建并呈现给用户。这是代码:

listenerController = [[UINavigationController alloc] initWithRootViewController:listenerView];
[listenerController.navigationBar setTintColor:[UIColor colorWithRed:185.0f/255.0f green:80.0f/255.0f blue:0.0f/255.0f alpha:1.0f]];

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)                     
    [listenerController setModalPresentationStyle:UIModalPresentationFormSheet];
    [listenerController setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
    [listenerController setModalInPopover:YES];


[self presentModalViewController:listenerController animated:YES];    
[listenerController release];

这确实正确地创建了视图控制器,但是当它显示时,无论我的 iPad 处于什么方向,iPad 都会被强制返回纵向视图。然后当我关闭模式窗口时,它会旋转回来。

我已经将右侧窗格的视图控制器中的 shouldAutorotateToInterfaceOrientation 设置为 YES,我什至尝试将其添加到主应用程序委托类中,但没有任何运气。看起来我不应该为了重写 shouldAutorotateToInterfaceOrientation 方法而将 UINavigationController 子类化。

我是否从错误的对象调用 presentModalViewController?我已经尝试过 [self presentModalViewController ...] 以及 [self.parentViewController presentModalViewController ...],结果相同。

【问题讨论】:

【参考方案1】:

我假设您的代码示例中的 self 是右视图(详细信息)视图控制器。您需要从根UISplitViewController 调用presentModalViewController

【讨论】:

@andy 这对我有用。如果它对您有用,您应该考虑将其标记为正确。

以上是关于允许在以模式方式显示的以编程方式创建的视图内自动旋转的主要内容,如果未能解决你的问题,请参考以下文章

iOS:以编程方式在以编程方式创建的滚动视图中创建标签

故事板集合视图拒绝在以编程方式创建的按钮前面

在以编程方式创建的 UIView 层次结构之上添加子视图

IOS5 - 如何在以编程方式创建的视图中播放视频?

无法在以编程方式创建的窗口中单击 iAd - 未调用bannerViewActionShouldBegin?

Imageview 未显示在以编程方式创建的 collectionview 中