addSubview导致的旋屏问题:shouldAutorotateToInterfaceOrientation方法不调用

在我的app中,有一个登录页面ViewController,我在其中实现了shouldAutorotateToInterfaceOrientation方法,让它支持自动旋屏:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

{

return interfaceOrientation == UIInterfaceOrientationPortrait ||

interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown;

}

这个方法工作得很好,当屏幕从正向模式旋转到倒置人像模式时,View Controller如预期旋转。

当登录完成,我用以下代码显示另一个View Controller:

iPadMainVC *mainVC=[[iPadMainVC alloc]initWithNibName:@"iPadMainVC"

bundle:nil];

UINavigationController *nController = [[UINavigationController alloc]initWithRootViewController:mainVC];

[nController setNavigationBarHidden:YES animated:NO];

self.view.window.rootViewController = nController;

在这个View Controller(iPadMainVC)中,我把前面的shouldAutorotateToInterfaceOrientation方法代码复制粘贴进去了。

然而,当iPad旋转时,除了视图第1次load时以外,shouldAutorotateToInterfaceOrientation方法不会被调用。

我添加了一些打印语句在该方法中进行debug:

if (interfaceOrientation== UIDeviceOrientationPortrait) NSLog(@"Up");

if(interfaceOrientation == UIDeviceOrientationPortraitUpsideDown) NSLog(@"Down");

程序运行时,在登录完成,刚刚进入iPadMainVC视图的时候,shouldAutorotate方法会调用3次:

[11567:207] Up

[11567:207] Up

[11567:207]Up

此后无论你怎样旋转屏幕,shouldAutorotate方法都不会调用了。

我查到有的资料说,“shouldAutorotateToInterfaceOrientation doesn't work well if you are using [someViewaddSubview]”(使用addSubview方式添加的ViewController,shouldAutorotate方法不能正常工作)。

如果是这样,那么我原来的View Controller(登录页面)就是用addSubview添加的:

⋯⋯

[window addSubview:rootController.view];

[window makeKeyAndVisible];

⋯⋯

我需要把它修改为:

⋯⋯

window.rootViewController=rootController;

⋯⋯

这样,shouldAutorotate方法才能很好地工作。

结论

这样,如果要在程序中很好地支持旋屏,尽量不要使用addSubview方式切换视图。我们可以用popoverViewController或presentModalViewController替代。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值