Swift 在 KINWebBrowserViewController 视图中允许横向

Swift Allow landscape in KINWebBrowserViewController view

我有一个 table,每个人都分配了一个 link。当点击一行时,link 在 KINWebBrowserViewController 视图中打开。我不希望 table 允许横向,但我希望网络浏览器允许它。我该怎么做?

一些代码:

    let linkItem = linkLabels[indexPath.row] as String

    let webBrowser = KINWebBrowserViewController()
    let url = NSURL(string: linkItem)
    webBrowser.actionButtonHidden = true
    webBrowser.loadURL(url)

    self.navigationController?.pushViewController(webBrowser, animated: true)

欢迎所有建议。谢谢:)

在 Xcode 项目的“常规 - 部署信息”部分,勾选应用中任何屏幕的所有允许方向。

iOS 在屏幕上可见的最根 UIViewController 中调用 supportedInterfaceOrientations 方法。如果 VC 覆盖了整个屏幕,那么更早的 VC 秒(更靠近根 viewController)不会调用该方法。

如果你的 webBrowser VC 覆盖了整个屏幕,那么在里面放一个方法:

override func supportedInterfaceOrientations() -> Int { return Int(UIInterfaceOrientationMask.All.rawValue) }

如果webBrowser没有覆盖整个屏幕,并且navigationController仍然显示导航条,那么该方法将不会被调用,而navigationController中的方法将被调用取而代之的是。所以,subclass UINavigationController:

class CustomNC:UINavigationController {
    override func supportedInterfaceOrientations() -> Int { 
        if visibleViewController is KINWebBrowserViewController { return Int(UIInterfaceOrientationMask.All.rawValue) }
        return Int(UIInterfaceOrientationMask.Portrait.rawValue)
    }
}

并将您的 UINavigationController 声明为 CustomNC。我还没有测试代码,它可能有拼写错误,但该技术现在对我有用。

更多解释:CustomNC 是一种新的、更聪明的 UINavigationController,您将要发明它。您可以将代码放在项目的任何 swift 文件中。它就像现有的 UINavigationController,只是它改变了旋转时的行为。所以你希望它继承 UINavigationController 的所有行为,然后只是覆盖旋转位。这一点继承:

class CustomNC:UINavigationController {

这个位是最重要的:

override func supportedInterfaceOrientations() -> Int { 

并且您需要告诉 Xcode 您的根 ViewController 是 CustomNC 而不是普通的 UINavigationController。如果您使用故事板构建了项目,则可以单击 UINavigationController 到 select,然后将其 class 从 UINavigationController 更改为 CustomNC Identity Inspector 选项卡位于 Xcode 的右上角。