开发者

iPad SplitViewController with menu in portrait mode like settings app

开发者 https://www.devze.com 2022-12-26 23:06 出处:网络
I would like obtain a SplitView 开发者_C百科on my iPad application with my left menu in a portrait orientation such as iPad settings. For now in portrait orientation I have a content view in full scre

I would like obtain a SplitView 开发者_C百科on my iPad application with my left menu in a portrait orientation such as iPad settings. For now in portrait orientation I have a content view in full screen and I have a button at NavigationBar which includes a popover with my left menu.


This is the magic you need:

This method is in UISplitViewControllerDelegate, available on iOS 5.0

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


You should definitely have a look at Matt Gemmell's MGSplitViewController.

MGSplitViewController is an open source replacement for UISplitViewController, with various useful enhancements.


Unfortunately, it's an undocumented method (i.e. private API).

[splitViewController setHidesMasterViewInPortrait:NO];

I think you need to create a custom view controller containing a table view (as the master controller) and another generic subview (as the detail controller) to simulate this.


The easiest way to get the effect you want may be to just not use a UISplitView. Instead, just create a normal view, put a table view on its left side, your detail view on the right side, and then set the autosizing stuff appropriately so that everything looks right in both portrait and landscape.


As ccwasden stated, shouldHideViewController is deprecated as of iOS8. In Objective-C, use...

splitViewController.preferredDisplayMode = UISplitViewControllerDisplayModeAllVisible;


Since shouldHideViewController is deprecated in iOS8, you will need to use this instead (Swift):

splitViewController.preferredDisplayMode = UISplitViewControllerDisplayMode.AllVisible


some people asked me the same question on our blog and I found a solution for that. You will find it at the end of my blog post Your first split view controller | Seaside.

In general, all you have to do is to create a subclass of UISplitViewController and override the method willAnimateRotationToInterfaceOrientation: duration: and adjust your master and detail views when the interface orientation will change to portrait mode.

Cheers, Andreas


In Swift:

splitViewController.preferredDisplayMode = .allVisible

0

精彩评论

暂无评论...
验证码 换一张
取 消