A S*_*edo 7 ipad uisplitviewcontroller modalviewcontroller ios
我试图在我的iPad应用程序中显示一个UISplitViewController,将其显示为模态视图控制器.我设法显示它,但由于某种原因,模态视图左侧有一个间隙,状态栏的大小也会在方向更改时保留.

有人知道为什么会这样吗?或者如果这是可能的话?也许我只是在挖自己一个巨大的洞.
就像你们许多人一样,我需要一种"模态方式"来使用UISplitViewController.这似乎是一个老问题,但我在StackOverflow中发现的最多只是解释为什么当你试图这样做时(例如上面接受的答案)或'hack-arounds'时问题发生.
但是,有时更改大部分代码库并使UISplitViewController成为初始对象以使其功能正常运行也不是很方便.
事实证明,有一种方法可以让每个人都满意(包括Apple指南).我发现最好的解决方案是正常使用UISplitViewController,但是当需要显示/解除时,请使用以下方法:
-(void)presentWithMasterViewController: (UIViewController *) thisMasterViewController
andDetailViewController: (UIViewController *) thisDetailViewController
completion:(void(^)(void))completion
{
masterViewController = thisMasterViewController;
detailViewController = thisDetailViewController;
[self setViewControllers:[NSArray arrayWithObjects:masterViewController, detailViewController, nil]];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
self.window.rootViewController = self;
[self.window makeKeyAndVisible];
if(completion)
completion();
}
-(void)dismissViewControllerWithCompletion:(void (^)(void))completion
{
self.window = nil;
masterViewController = nil;
detailViewController = nil;
if(completion)
completion();
}
Run Code Online (Sandbox Code Playgroud)
其中"window",是UISplitViewController子类的属性.系统将负责其余部分!
为了方便/参考,我将它作为UISplitViewController子类上传到gitHub:
- 如何使用示例 -
mySplitViewController = [[ModalSplitViewController alloc] init];
mySplitViewController.delegate = self;
[mySplitViewController presentWithMasterViewController:masterViewController andDetailViewController:detailViewController completion:nil];
// when done:
[mySplitViewController dismissViewControllerWithCompletion:nil];
mySplitViewController = nil;
Run Code Online (Sandbox Code Playgroud)
旁注:我猜大多数混淆源于Apple文档中的UISplitView用法示例使用appDelegate中创建的窗口,以及大多数人对窗口概念不太熟悉的事实 - 因为我们通常不会不需要(它们在StoryBoards或样板代码中创建一次).
此外,如果您正在进行状态恢复,则不应忘记系统不会自动恢复以编程方式创建的UIViewControllers.
该库存UISplitViewController仅用作根视图控制器.以模态方式呈现一个与Apple人机界面指南相反,并且很有可能被App Review团队拒绝.此外,您可能会收到错误:
应用程序尝试以模态方式呈现拆分视图控制器
| 归档时间: |
|
| 查看次数: |
9509 次 |
| 最近记录: |