强制iPad应用程序即使在纵向方向显示splitView(如设置iPad应用程序)

时间:2011-01-07 09:45:54

标签: iphone ipad ios4 ios-4.2

我正在尝试开发一个基于splitView的iPad应用程序,它可以在每个方向显示拆分界面。我已经尝试了在this教程中给出的UISplitViewController类的子类化,但它不起作用。我尝试创建一个类别来设置_hidesMasterViewInPortrait = (hidden) ? 0 : 1;,正如上面博客中的一条评论所示,但没有任何效果。

任何人都可以帮助我找到解决方法,而不使用任何第三方框架或类吗?

9 个答案:

答案 0 :(得分:13)

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

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

据Docs称,这已经从iOS 5开始提供。

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

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

self.splitViewController.delegate = self;

答案 1 :(得分:12)

在iOS8(Swift)中,请使用:

splitViewController.preferredDisplayMode = UISplitViewControllerDisplayMode.AllVisible

答案 2 :(得分:3)

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

编辑12/19/2011:在iOS 5中,问题基本上已经解决,因为您现在可以定义自己的容器视图控制器,另外还可以防止在拆分视图中解除左视图。

答案 3 :(得分:2)

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

https://github.com/mattgemmell/MGSplitViewController

答案 4 :(得分:1)

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

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

答案 5 :(得分:0)

我从未实现强制SPlitViewController执行此操作,但由于您需要为这两个部分创建控制器,您可以重复使用这些控制器以您希望的方式显示内容。

答案 6 :(得分:0)

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

这是它的工作方式

[splitViewController setHidesMasterViewInPortrait:NO];

答案 7 :(得分:0)

你不能拥有Apple' splitViewController的行为与此类似(并进入应用程序商店)。您需要编写自己的容器视图控制器。 See Apple' docs

答案 8 :(得分:0)

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