使用 UINavigationController iOS 6 弹回初始视图控制器时方向更改
Posted
技术标签:
【中文标题】使用 UINavigationController iOS 6 弹回初始视图控制器时方向更改【英文标题】:Orientation changes when pop back to the initial viewcontroller using UINavigationController iOS 6 【发布时间】:2013-11-06 12:50:44 【问题描述】:我有一个导航控制器,其中根视图控制器即横向和纵向都支持 VC1。当我在横向推动另一个视图控制器时,即。 VC2 只支持纵向模式,回到 VC1,视图将变为纵向。但我仍然处于横向模式。请帮我解决 ios 6 问题。
请检查以下代码。
MyViewController1 *theController =[[MyViewController1 alloc] init];
UINavigationController *navCntlr = [[UINavigationController alloc] initWithRootViewController:theController];
[self.navigationController presentViewController:navCntlr animated:YES completion:nil]; [theController release];
[navCntlr release];
在 MyViewController1 中
-(BOOL)shouldAutorotate
return YES;
-(NSUInteger)supportedInterfaceOrientations
return UIInterfaceOrientationMaskAllButUpsideDown;
在 VC2/MyViewController2 中我添加了以下代码。
-(BOOL)shouldAutorotate
return YES;
-(NSUInteger)supportedInterfaceOrientations
return UIInterfaceOrientationMaskPortrait;
我也继承了根导航栏。
【问题讨论】:
【参考方案1】:实际上,这被确定为 IOS6 中的一个错误,它发生在 ImageViewController 上,它只支持纵向方向......所以我花了很多时间找到了一种解决方法......
希望这会有所帮助 所以首先要做的事情......
在您的 AppDelegate.h 中添加一个属性
@property BOOL model;
那么 在 AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
// Override point for customization after application launch.
self.model=NO;
return YES;
在 AppDelegate.m 中也添加这个方法
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
if(!self.model)
return UIInterfaceOrientationMaskLandscape; //or needed orientation
else
return UIInterfaceOrientationMaskAllButUpsideDown;
然后在你的视图控制器中展示 VC2 之前
实施 这段代码...
AppDelegate *appdelegate=(AppDelegate*)[[UIApplication sharedApplication] delegate];
appdelegate.model=YES;
然后你只需更改 VC2 的 viewWillDisappear 中的值
AppDelegate *appdelegate=(AppDelegate*)[[UIApplication sharedApplication] delegate];
appdelegate.model=NO;
【讨论】:
感谢@Raon 的回复。我想我没有清楚地解释我的问题,抱歉。 VC1 应该支持两个方向,而 VC2 应该只支持纵向,当我在横向模式下转到 VC2 时,在从 VC2 中选择横向模式后,它只会以纵向模式显示其视图。 VC1 视图应为横向,但当前未发生。由于 VC2 不支持横向,当我来来去去时,VC1 视图也被旋转为纵向。请建议 @user2960314 所以你说你需要相同的方向,即VC1可能是横向/纵向>> VC2(纵向)>> VC1(横向或纵向)所以如果VC1在它之前是纵向的当它在 VC2 之后重新出现时应该返回到纵向,如果 Vc2 是横向的,它应该保持横向.. @Raon.. 这是非常不正常的测试方式。当我将设备从 VC1 保持为横向并推送另一个仅支持纵向的视图 VC2 时,我发现了这个问题,因此它仅以纵向加载其视图(请注意,设备仍处于横向),现在选择 VC2 上的 VC1支持这两种方向已将其视图更改为纵向,即使设备仍处于横向状态。问题出在 VC1 中,当我回来时它应该是横向的,但不是。 @user2960314 这是 6.0 的问题吗?还是其他任何有同样问题的? 不确定@Raon 所以只有我在这里发帖。这样如果其他人有同样的问题。以上是关于使用 UINavigationController iOS 6 弹回初始视图控制器时方向更改的主要内容,如果未能解决你的问题,请参考以下文章
UINavigationcontroller 中未使用的视图会发生啥?
使用 push segue 时 UINavigationController 是不是强制
UINavigationController - 使用 UIBlurEffect 清除背景
一起使用 UITabBarController 和 UINavigationController