2015-05-27 26 views
2

我有一个应用程序,其中嵌入了一个NavigationController中的几个VC。在NavBar中返回锁定设备方向失败

我需要所有VC都以肖像方向锁定,只有纵向和横向都锁定一个VC。

我已经尝试不同的方法,这一次是为我工作:

extension UINavigationController { 
public override func supportedInterfaceOrientations() -> Int { 
return visibleViewController.supportedInterfaceOrientations() 
} 
public override func shouldAutorotate() -> Bool { 
return visibleViewController.shouldAutorotate() 
} 

} 

然后我修改每个视图控制器是这样的:

class ViewController: UIViewController { 
override func supportedInterfaceOrientations() -> Int { 
return Int(UIInterfaceOrientationMask.Portrait.rawValue) 
} 

} 

一切都很好,当我打开应用程序,从一个VC走向另一个。应该只有肖像的视图只有肖像。然后我打开未修改的视图,并按预期更改interfaceOrientation。

然后让我们说我留在景观的最后未修改的观点和我的NavBar按后退按钮,去到以前的控制器(这已修改为只有人像)。 VC的布局显示为横向。

如果我一直按下按钮,所有其他VC的行为就像他们从未被告知只是肖像一样。

我用这篇文章Korey Hinton, Lock Screen Rotation

回答

1

我想我能够复制你描述的场景。不幸的是,我尝试强制更新的正常方式无效,但我确实发现this SO answer似乎有效。把这个在你viewDidAppear返回到视图控制器:

override func viewDidAppear(animated: Bool) { 
    super.viewDidAppear(animated) 

    let value = UIInterfaceOrientation.Portrait.rawValue 
    UIDevice.currentDevice().setValue(value, forKey: "orientation") 
} 

此修复程序似乎为我工作。尽管这是一个非常粗糙的过渡。我希望能帮到

+1

你是对的,过渡是相当粗糙的,但至少它为我做了这份工作,非常感谢你抽出宝贵时间回答,Korey,我真的很感激它! – alahab

+0

@alahab没问题:) –

0

我有这个问题所呈现的视图控制器和方向锁的差异。我将此纳入“解锁”控制器:

- (void)viewWillDisappear:(BOOL)animated 
{ 
    [super viewWillDisappear:animated]; 
    [self willRotateToInterfaceOrientation:UIInterfaceOrientationLandscapeLeft duration:0]; 
} 

所以当该控制器将要被删除(后退按钮按下)发送,它应该返回到风景(不要紧,向左或向右的消息因为前面的控制器会自动将它转换为正确的方向)。这是在Objective-C中,但我相信有一个类似的操作迅速。如果它让事情看起来很奇怪,你可能不得不搅动动画的持续时间,但是我的立即开关就完美了。

+0

谢谢!我试图把它翻译成迅捷。当我尝试实现'willRotateToInterfaceOrientation'它说:“willRotateToInterfaceOrientation(_:duration :)'在iOS版本8.0中被弃用:实现viewWillTransitionToSize:withTransitionCoordinator:在这个答案[http://stackoverflow.com/questions/26943808/ios - 如何运行一个功能后设备已旋转迅速]必须有一些代码粘贴在viewWillTransitionToSize里面。你有什么想法应该如何正确看待iOS8和Swift? – alahab

+0

我不知道。我还没有机会深入工作,但我有一堆我支持的遗留代码,我会尝试手动调用transitiontosize函数而不是willrotate。我猜你可以找到一个set op参数来发送那就会做你需要的东西 – Putz1103

相关问题