如果视图添加到窗口,即使设备处于横向,也会将方向设置为纵向。 如果视图添加到app delegate,application:didFinishLaunchingWithOptions:方法,那么它可以正常工作。但如果稍后添加视图则不会。
举个例子,我有一个切换视图的例程。最简单的形式是:
- (void)switchToNewViewController:(UIViewController *)newViewController {
if ([[window subviews]count]!=0) {
[[[window subviews]objectAtIndex:0] removeFromSuperview];
}
[window addSubview:newViewController.view];
}
如果从didFinishLaunching中调用此方法,则方向是正确的。如果不是,则方向是纵向。
最简单的情况是在didFinishLaunching中我有以下两行
// The following line works
[self switchToNewViewController:fullScreenViewController];
// The following line which delays the method call until later results
// in incorrect orientation
[self performSelector:@selector(switchToNewViewController:) withObject:fullScreenViewController afterDelay:0.1];
有没有办法让视图有正确的方向?
答案 0 :(得分:1)
确保视图控制器中的shouldAutorotateToInterfaceOrientation具有正确的逻辑
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
return YES; //this supports all orientations
}
如果要在InterfaceBuilder中链接东西,还要确保视图和viewcontroller都配置为您喜欢的初始方向。 (右上角有一个小箭头可以旋转视图和查看控制器)
如果您仍有问题,您使用的是UINavigationController还是类似的? UINavigationController需要被子类化,并且如果你想支持除了portait以外的东西,应该实现shouldAutorotateToInterfaceOrientation。