更改UIWindow子视图时,未设置方向

时间:2010-09-15 17:41:38

标签: iphone ipad orientation subview addsubview

如果视图添加到窗口,即使设备处于横向,也会将方向设置为纵向。 如果视图添加到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];

有没有办法让视图有正确的方向?

1 个答案:

答案 0 :(得分:1)

确保视图控制器中的shouldAutorotateToInterfaceOrientation具有正确的逻辑

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
    return YES; //this supports all orientations
}

如果要在InterfaceBuilder中链接东西,还要确保视图和viewcontroller都配置为您喜欢的初始方向。 (右上角有一个小箭头可以旋转视图和查看控制器)

如果您仍有问题,您使用的是UINavigationController还是类似的? UINavigationController需要被子类化,并且如果你想支持除了portait以外的东西,应该实现shouldAutorotateToInterfaceOrientation。