在两个视图之间切换以及从纵向切换到横向时出现 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 方向问题,反之亦然的主要内容,如果未能解决你的问题,请参考以下文章

iOS:如何在情节提要中在横向和纵向视图之间切换?

在 iPhone 中将视图从纵向切换到横向,就像 iPhone 中的计算器一样

SwiftUI - 丑陋的动画从纵向切换到横向

Iphone:无法从我的横向视图切换回纵向视图

元素无法从纵向切换到横向 ipad

从横向切换到纵向后,将 UIScrollView 保持在正确的位置