【问题标题】:Forcing an iPad app to show splitView even in Portrait orientation(Like the Settings iPad app)强制 iPad 应用程序在纵向显示 splitView(如设置 iPad 应用程序)
【发布时间】:2011-06-05 04:26:41
【问题描述】:

我正在尝试开发一个基于 splitView 的 iPad 应用程序,它可以在每个方向显示拆分界面。我已尝试按照this 教程中的说明对 UISplitViewController 类进行子类化,但它不起作用。我尝试创建一个类别来设置 _hidesMasterViewInPortrait = (hidden) ? 0 : 1;,如上述博客中的一个 cmet 中所建议的那样,但没有任何效果。

在不使用任何第三方框架或类的情况下,谁能帮我找到解决方法?

【问题讨论】:

  • 您好,有一个非常简单有效的方法:[splitViewController setHidesMasterViewInPortrait:NO];但它是一个未记录的 API,这意味着 Apple 不允许我们使用它。不敢相信!

标签: iphone ipad ios4 ios-4.2


【解决方案1】:

在 iOS8 (Swift) 中,使用这个:

splitViewController.preferredDisplayMode = UISplitViewControllerDisplayMode.AllVisible

【讨论】:

  • 在 swift 4.0 中重命名为 UISplitViewControllerDisplayMode.allVisible
【解决方案2】:
you just need to add this delegate method to your detail view manager

    - (BOOL)splitViewController:(UISplitViewController *)svc 
       shouldHideViewController:(UIViewController *)vc 
                  inOrientation:(UIInterfaceOrientation)orientation
    {
        // Hide split view in portrait mode
        //return UIInterfaceOrientationIsPortrait(orientation);

        // Show Split view in portrait mode
        return NO;
    }

//vKj

【讨论】:

    【解决方案3】:

    在实现UISplitViewControllerDelegate协议的viewController类中(通常是DetailViewController),添加如下代码。

    - (BOOL) splitViewController:(UISplitViewController *)svc shouldHideViewController:(UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation {   
        return NO;
    }
    

    根据文档,从 iOS 5 开始就可以使用。

    查看实际效果:
    -打开 Xcode。
    - 创建一个新的主/详细应用程序。
    - 将上述代码添加到 DetailViewController
    - 在 iPad 模拟器中运行。

    在您自己的项目中,您需要将以下行添加到 detailViewController 的 viewDidLoad 方法中。

    self.splitViewController.delegate = self;
    

    【讨论】:

    • 请注意,这在 iOS 8 中已被弃用。
    • 对于iOS 8,将SplitViewController 的preferredDisplayMode 设置为AllVisible
    【解决方案4】:

    你不能让 Apple 的 splitViewController 表现得像那样(并进入应用商店)。您需要编写自己的容器视图控制器。 See Apple' docs

    【讨论】:

      【解决方案5】:

      你可以继承 UISplitViewController,然后覆盖下面的方法:

       - (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval) duration
      

      【讨论】:

        【解决方案6】:

        你好,我的第一篇文章,我希望能有所帮助:

        这是它的工作方式

        [splitViewController setHidesMasterViewInPortrait:NO];
        

        【讨论】:

          【解决方案7】:

          您所描述的内容听起来像是 Apple 的设置应用程序(在 iPad 上)。我的直觉是这不是 UISplitView。它只是一个包含两个表视图的视图。设备旋转时手动修复布局。换句话说,如果你不想要 UISplitView 的功能,那么你根本就不需要 UISplitView。

          编辑 12/19/2011:在 iOS 5 中问题基本解决了,因为您现在可以定义自己的容器视图控制器,而且您可以防止在拆分视图中关闭左视图。

          【讨论】:

            【解决方案8】:

            我不确定标准的SplitViewController是否可行,但您可以使用自定义的

            https://github.com/mattgemmell/MGSplitViewController

            【讨论】:

            • 感谢您的回复,但正如我在帖子中所说,我正在尝试在不使用任何第三方类的情况下找到解决方案。也许如果您已经将项目扔到给定的链接中,您可以帮助我了解他们是如何做到的!
            • 没有官方方法可以做到这一点,设置 _hidesMasterViewInPortrait 会导致应用拒绝恕我直言(因为它显然是私人的东西)。
            • +1 获取该信息。我想我会尝试实施 VdesmedT 的答案
            【解决方案9】:

            我从来没有强制 SPlitViewController 这样做,但由于您需要为这两个部分创建控制器,您可以重用这些控制器以按照您想要的方式显示内容。

            【讨论】:

            • 根据 Jilouc 的评论,我认为这将是最可行的选择
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-10-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多