epo*_*gee 30 cocoa-touch objective-c uiviewcontroller uinavigationcontroller device-orientation
这个问题是关于UINavigationController中的iOS设备旋转和多个受控视图.有些观点应该限制为纵向,有些观点应该自由旋转.如果您尝试使用三个视图创建最简单的设置,您会注意到自动旋转行为有一些非常令人讨厌的怪癖.然而,这个场景非常简单,所以我想我要么没有正确地进行自动旋转实施,要么就是忘了什么.
我有一个非常基本的演示应用程序,显示了怪异,我制作了一个视频显示它在行动.
设置非常基本:调用三个视图控制器FirstViewController,SecondViewController并且ThirdViewController所有扩展AbstractViewController显示带有类名称的标签,并且shouldAutorotateToInterfaceOrientation:当设备处于纵向时返回YES .SecondViewController重写此方法以允许所有旋转.所有三个具体类都添加了一些彩色方块,以便能够通过将控制器推入/关闭来在视图之间导航UINavigationController.到目前为止,我想说的是一个非常简单的场景.
如果您以纵向或横向方向握住设备,这是我不仅希望实现的结果,而且还期望.在第一张图片中,您会看到所有视图都是"直立",而在第二张图片中,您会看到只有第二个视图控制器反转设备的方向.要清楚,应该可以从横向模式的第二个视图导航到第三个视图,但因为第三个视图仅支持纵向方向,所以它应该只能以纵向显示.查看结果是否正常的最简单方法是查看载体条的位置.

但这个问题在这里是因为实际结果完全不同.根据您在旋转设备时所处的视图,并根据您导航到下一个视图,视图将不会旋转(具体而言,didOrientFromInterfaceOrientation:永远不会调用该方法).如果你在第二个横向并且导航到第三个,它将具有与第二个相同的方向(=坏).但是,如果您从第二个导航回到第一个,则屏幕将旋转为"强制"纵向模式,并且载波条将位于设备的物理顶部,无论您如何握住它.视频更详细地显示了这一点.

我的问题是双重的:
干杯,EP.
编辑:作为奖励之前的最后一招,我完全重写了这个问题,使其更短,更清晰,并希望更有吸引力给出答案.
简短的回答是你正在使用UINavigationController,这不会像你想要的那样工作.来自Apple的文档:
为什么我的UIViewController不会随设备一起旋转?
UITabBarController或UINavigationController中的所有子视图控制器都不同意公共方向集.
要确保所有子视图控制器正确旋转,必须为表示每个选项卡或导航级别的每个视图控制器实现shouldAutorotateToInterfaceOrientation.每个人必须就旋转发生的方向达成一致.也就是说,对于相同的方向位置,它们都应该返回YES.
您必须根据自己的意愿推出自己的视图/控制器堆栈管理.
在App委托中制作一个bolean来控制你想要的方向,例如make bool来启用Portrait,并在你想要的视图控制器中允许Portrait通过共享应用程序启用它
在视图控制器中,您要在其中启用或禁用所需的方向.
((APPNAMEAppDelegate *)[[UIApplication sharedApplication] delegate]).enablePortrait= NO;
Run Code Online (Sandbox Code Playgroud)
在App Delegate中.
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
NSLog(@"Interface orientations");
if(!enablePortrait)
return UIInterfaceOrientationMaskLandscape;
return UIInterfaceOrientationMaskLandscape|UIInterfaceOrientationMaskPortrait;
}
Run Code Online (Sandbox Code Playgroud)
每次旋转设备时都会触发这些方法,基于这些BOOL启用所需的方向.
| 归档时间: |
|
| 查看次数: |
12748 次 |
| 最近记录: |