以编程方式更改方向无法正常工作

卡希法西夫

我的整个应用程序处于portrait模式。我只想在landscape模式下使用一个视图控制器(左)。

func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow?) -> UIInterfaceOrientationMask 
{
    if let _navigationController = window?.rootViewController as? UINavigationController {

        if _navigationController.topViewController is FullScreenPlayerVC {

            return UIInterfaceOrientationMask.LandscapeLeft
        }
    }

    return UIInterfaceOrientationMask.Portrait
}

这是我的控制器A

override func shouldAutorotate() -> Bool
{
    return true
}

override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask
{
    return UIInterfaceOrientationMask.Portrait
}

现在我按下控制器B。这是我的控制器B

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

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

override func shouldAutorotate() -> Bool
{
    return true
}

override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask
{
    return UIInterfaceOrientationMask.Landscape
}

当我将控制器B保持在纵向模式时按控制器B时,它按我的要求工作,但是如果我已经将手机保持在横向模式。

它没有执行所需的操作。搜索了很多有关它,但是还找不到解决方案。

我尝试了许多解决方案,但没有任何效果。

艾丽尔·安东尼奥·芬多拉(Ariel Antonio Fundora)

这是您的问题和其他相关问题的通用解决方案。

1.创建辅助类UIHelper并使用以下方法:

    /**This method returns top view controller in application  */
    class func topViewController() -> UIViewController?
    {
        let helper = UIHelper()
        return helper.topViewControllerWithRootViewController(rootViewController: UIApplication.shared.keyWindow?.rootViewController)
    }

    /**This is a recursive method to select the top View Controller in a app, either with TabBarController or not */
    private func topViewControllerWithRootViewController(rootViewController:UIViewController?) -> UIViewController?
    {
        if(rootViewController != nil)
        {
            // UITabBarController
            if let tabBarController = rootViewController as? UITabBarController,
                let selectedViewController = tabBarController.selectedViewController {
                return self.topViewControllerWithRootViewController(rootViewController: selectedViewController)
            }

            // UINavigationController
            if let navigationController = rootViewController as? UINavigationController ,let visibleViewController = navigationController.visibleViewController {
                return self.topViewControllerWithRootViewController(rootViewController: visibleViewController)
            }

            if ((rootViewController!.presentedViewController) != nil) {
                let presentedViewController = rootViewController!.presentedViewController;
                return self.topViewControllerWithRootViewController(rootViewController: presentedViewController!);
            }else
            {
                return rootViewController
            }
        }

        return nil
    }

2.根据您的期望行为创建一个协议,因为您的具体情况将是横向的。

协议方向IsOnlyLandscape {}

注意:如果需要,可将其添加到UIHelper类的顶部。

3.扩展您的View Controller

在您的情况下:

class B_ViewController: UIViewController,orientationIsOnlyLandscape {

   ....

}

4.在应用程序委托类中,添加以下方法:

 func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
        let presentedViewController = UIHelper.topViewController()
        if presentedViewController is orientationIsOnlyLandscape {
            return .landscape
        }
        return .portrait
    }

最后说明:

  • 如果更多类处于横向模式,则只需扩展该协议即可。
  • 如果需要视图控制器的其他行为,请创建其他协议并遵循相同的结构。
  • 本示例解决了推视图控制器后方向改变的问题

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

iPad方向以编程方式无法正常工作

来自分类Dev

Android USSD以编程方式无法正常工作

来自分类Dev

以编程方式更改识别本意,以识别英语以外的其他语言无法正常工作

来自分类Dev

Android以编程方式更改方向?

来自分类Dev

Android EditText setHint以编程方式无法正常工作

来自分类Dev

以编程方式添加时,自动布局约束无法正常工作

来自分类Dev

iOS:UIScrollView以编程方式缩放无法正常工作

来自分类Dev

Android RecyclerView滚动以编程方式无法正常工作

来自分类Dev

方向更改,但视图的框架在iOS中无法正常工作

来自分类Dev

以编程方式无法正常运行

来自分类Dev

尝试以快速方式以编程方式截取屏幕截图时,UIBlurEffect无法正常工作

来自分类Dev

ColorStateList无法以编程方式工作

来自分类Dev

Django 1.7-以编程方式添加权限无法正常工作

来自分类Dev

为什么以编程方式为Android线性布局列设置权重无法正常工作?

来自分类Dev

可编辑微调器无法在Android中以编程方式正常工作?

来自分类Dev

以编程方式设置IsSelected属性时,Datagrid虚拟化无法正常工作

来自分类Dev

为什么以编程方式为Android线性布局列设置权重无法正常工作?

来自分类Dev

设备方向在iOS中无法正常工作

来自分类Dev

方向盘维修无法正常工作

来自分类Dev

Chart.js-响应性在设备方向更改上无法正常工作

来自分类Dev

自动调整大小无法以编程方式工作

来自分类Dev

多行工具提示无法以编程方式工作

来自分类Dev

无法以编程方式更改UIButton的框架。

来自分类Dev

QPushButton快捷方式无法正常工作

来自分类Dev

列表项对齐方式无法正常工作

来自分类Dev

更改方向后以编程方式拍摄屏幕截图

来自分类Dev

如何在Swift中以编程方式更改UIWebView方向

来自分类Dev

以编程方式更改氏族工厂菜单方向

来自分类Dev

在python中以编程方式添加按钮时,kivy的size_hint和pos_hint无法正常工作

Related 相关文章

  1. 1

    iPad方向以编程方式无法正常工作

  2. 2

    Android USSD以编程方式无法正常工作

  3. 3

    以编程方式更改识别本意,以识别英语以外的其他语言无法正常工作

  4. 4

    Android以编程方式更改方向?

  5. 5

    Android EditText setHint以编程方式无法正常工作

  6. 6

    以编程方式添加时,自动布局约束无法正常工作

  7. 7

    iOS:UIScrollView以编程方式缩放无法正常工作

  8. 8

    Android RecyclerView滚动以编程方式无法正常工作

  9. 9

    方向更改,但视图的框架在iOS中无法正常工作

  10. 10

    以编程方式无法正常运行

  11. 11

    尝试以快速方式以编程方式截取屏幕截图时,UIBlurEffect无法正常工作

  12. 12

    ColorStateList无法以编程方式工作

  13. 13

    Django 1.7-以编程方式添加权限无法正常工作

  14. 14

    为什么以编程方式为Android线性布局列设置权重无法正常工作?

  15. 15

    可编辑微调器无法在Android中以编程方式正常工作?

  16. 16

    以编程方式设置IsSelected属性时,Datagrid虚拟化无法正常工作

  17. 17

    为什么以编程方式为Android线性布局列设置权重无法正常工作?

  18. 18

    设备方向在iOS中无法正常工作

  19. 19

    方向盘维修无法正常工作

  20. 20

    Chart.js-响应性在设备方向更改上无法正常工作

  21. 21

    自动调整大小无法以编程方式工作

  22. 22

    多行工具提示无法以编程方式工作

  23. 23

    无法以编程方式更改UIButton的框架。

  24. 24

    QPushButton快捷方式无法正常工作

  25. 25

    列表项对齐方式无法正常工作

  26. 26

    更改方向后以编程方式拍摄屏幕截图

  27. 27

    如何在Swift中以编程方式更改UIWebView方向

  28. 28

    以编程方式更改氏族工厂菜单方向

  29. 29

    在python中以编程方式添加按钮时,kivy的size_hint和pos_hint无法正常工作

热门标签

归档