在两个视图之间切换以及从纵向切换到横向时出现 iPad 方向问题,反之亦然
Posted
技术标签:
【中文标题】在两个视图之间切换以及从纵向切换到横向时出现 iPad 方向问题,反之亦然【英文标题】:iPad Orientation issues when switching between two views and from portrait to landscape vice versa 【发布时间】:2011-03-24 16:20:58 【问题描述】:我正在使用两个视图控制器构建一个简单的应用程序,我正在使用 iPhone 模拟器测试代码,一切似乎都运行良好。当我从纵向旋转到横向或从横向旋转到纵向时,就会出现问题。这是应用程序的逻辑,应用程序总是以纵向启动,我有一个按钮可以在第一个视图上从 View1 切换到 View2。在 View2 上,我有另一个按钮可以从 View2 切换回 View1。假设我处于纵向模式,我从 View1 切换到 View2,然后将 iPad(在模拟器中)从纵向旋转到横向,当我从 View2 切换回来时,即返回到 View1。 View1屏幕/视图以Portrait显示,而View2屏幕显示在后台,即View2的一部分显示在后台,我猜是因为View1本来是Portrait模式。
问题是.. 以前有没有人遇到过这个问题,如果有的话,有什么代码可以解决这个问题,其次,我如何在代码中识别设备的方向和视图的方向。
这个方法是切换到视图2:
-(IBAction) switchToView2: (id) sender
SecondViewController *myViewController = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
[self.view addSubview: myViewController.view];
[UIView commitAnimations];
这个方法是切换回View1:
-(IBAction) switchBackToView1:(id) sender
[self.view removeFromSuperview];
[UIView commitAnimations];
【问题讨论】:
【参考方案1】:来自您的代码:
[self.view addSubview: myViewController.view];
这让我相信您的 2 个视图是 myViewController.view 的子视图。这就解释了为什么它们同时出现。为不同的视图设置单独的视图控制器是有意义的。
【讨论】:
【参考方案2】:首先我认为
[UIView commitAnimations];
没有必要:
来自苹果
提交动画 标记开始/提交动画块的结束并安排动画执行。
在 Interface Builder 中,您是否将控制器的属性设置为 Landscape ?
希望这个帮助(对不起我的英语不好)
【讨论】:
【参考方案3】:是的,如果您不在代码中放置任何方向更改处理,就会发生这种情况。查看this guide,了解如何将视图设置为自动或手动处理方向变化的调整。
或者,如果您已经进行了处理,那么可能是因为您添加/删除视图的方式。为了更好地处理,我认为您应该尝试使用UINavigationController 管理视图的方式。即,您应该使用pushViewController:animated:
和popViewController:animated:
而不是addSubview:
和removeFromSuperview:
。
是的,正如 Yoos 所说,上面的代码中不需要[UIView commitAnimations]
。
希望这会有所帮助。
【讨论】:
以上是关于在两个视图之间切换以及从纵向切换到横向时出现 iPad 方向问题,反之亦然的主要内容,如果未能解决你的问题,请参考以下文章