【问题标题】:Rotate a single view to landscape in a portrait locked Application in iOS 8在 iOS 8 的纵向锁定应用程序中将单个视图旋转为横向
【发布时间】:2015-05-30 06:54:26
【问题描述】:

我有一个在视图控制器中使用纵向模式的应用程序,除了一个,一个页面只需要横向(横向左侧或横向右侧)。我怎样才能做到这一点? 我尝试了多种解决方案,说设置导航栏的方向模式并且应用程序会转动,但不幸的是这对我不起作用。我还尝试手动旋转视图,它可以工作,但是当我单击文本字段在其中写入内容时,键盘以纵向模式而不是横向模式出现。

NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationLandscapeRight];
[[UIDevice currentDevice] setValue:value forKey:@"orientation"];

上面的代码对我有用,但只有当我允许应用程序以横向和纵向旋转时,但这不是我想要的,因为这样所有页面都可以从纵向变成横向。

编辑:

我的情况是我被分配了一个已经完成的项目。制作这个应用程序的人一直在使用 STNavigation Manager(我不确定那是什么)而不是 self.navigationController 推送和弹出作为东西。所以 shouldAutoRotate 和这些代表在我的应用程序中不起作用。其次,他还禁用了导航栏并创建了自己的导航栏。

【问题讨论】:

    标签: ios objective-c iphone ios8 orientation


    【解决方案1】:

    如果您在应用程序中启用所需的横向模式,您可以使用您正在使用的代码强制应用程序进入您想要的横向模式,然后在您返回到您想要的屏幕之前将其强制恢复为纵向模式是肖像。

    我发现最好的方法是创建一个 UINavigationController 的子类,它不允许通过旋转

    -(BOOL)shouldAutoRotate
    

    然后在一个视图中,我希望景观在 VC 级别上实现相同的方法返回 true。

    【讨论】:

    • 没错。但是让我解释一下我的情况,我被分配了一个已经完成的项目。制作这个应用程序的人一直在使用 STNavigation Manager(我不确定那是什么),而不是 self.navigationController 推送和弹出的东西。所以 shoudAutoRotate 和这些代表在我的应用程序中不起作用。其次,他还禁用了导航栏并创建了自己的导航栏。
    • 啊,我明白了,我认为您将无法实现您想要的 otucome。您仍然应该能够在导航控制器上设置旋转属性或在每个返回 false 的视图控制器上实现该方法。
    • 我想我将不得不让键盘处于纵向模式,并通过 GAOfflineTransform 以横向模式查看,因为我看不到解决此问题的其他方法:\
    • 如果您认为这是一个有效的问题,请为我的问题投票,这样我至少可以获得足够的声誉来投票其他问题和答案。
    【解决方案2】:

    使用 UIView 的 transform 属性进行旋转:

    -(void)viewWillAppear:(BOOL)animated
    {
    CGAffineTransform newTransform = CGAffineTransformMake(0.0,1.0,-1.0,0.0,0.0,0.0);         
    self.view.transform = newTransform;
    
    }
    

    【讨论】:

    • 我这样做了,但正如我在问题中所说,这会旋转屏幕,但是当单击文本字段在其中写入时,键盘会以纵向模式而不是横向模式出现。
    猜你喜欢
    • 1970-01-01
    • 2016-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-18
    相关资源
    最近更新 更多