在iPhone上呈现模态视图控制器而不覆盖当前视图

9

在此输入图片描述

我一直在尝试添加视图容器,并在两侧留下20像素的空间。但似乎这不是正确的做法...

// ADD CHILD VIEW CONTROLLER
    [parentViewController addChildViewController:childViewController];
    [parentViewController.view addSubview:childViewController.view];
    [childViewController didMoveToParentViewController:parentViewController];

// REMOVE THE CHILD VIEW CONTROLLER
    [childViewController willMoveToParentViewController:nil];
    [childViewController view] removeFromSuperview];
    [childViewController removeFromParentViewController];

更新 我已经通过使用MZFormSheetController "https://github.com/m1entus/MZFormSheetController" 实现了表单演示和酷炫的视图过渡效果。


感谢提到“MZFormSheetController”! - Hani Ibrahim
5个回答

6

使用 MZFormSheetController "https://github.com/m1entus/MZFormSheetController" 实现带有炫酷视图过渡效果的表单展示。或者,对于 iOS 8 及以上版本,您可以使用 viewController.modalPresentationStyle = UIModalPresentationOverCurrentContext;。祝您好运!如果需要完整代码片段,请告诉我。


4
你可以尝试类似以下的方法:
DetailViewController *viewController= [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
viewController.modalPresentationStyle=UIModalPresentationFormSheet;
viewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;

[self presentViewController:viewController animated:YES completion:^{
    viewController.view.superview.frame = CGRectMake(0, 0, 310, 500);
    viewController.view.superview.center = self.view.center;
}];

根据您的需求,设置superview.framemodalTransitionStyle

2
当我呈现视图控制器时,它显示黑色背景。而且我认为UIModalPresentationFormSheet仅适用于iPad! - Mazen Kasser
1
在 iOS 8 及以后的版本中,你可以使用 viewController.modalPresentationStyle = UIModalPresentationOverCurrentContext; 这行代码。 - Mazen Kasser

1
更好的方法是拥有自己的控制器和视图。
在主控制器上使用当前视图控制器。
[self presentViewController:myController animated:YES completion:nil];

在viewDidLoad中调整myController的框架。
CGRect newFrame = self.view.frame;
newFame.size.width -= 40;
newFame.size.height -= 40;
newFrame.origin.x = 20;
newFrame.origin.y = 20;
self.view.frame = newFrame

将其作为子视图控制器添加是为了实现视图控制器容器,当您需要一个具有多个视图的单个控制器时,每个视图都有自己的控制器。

https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/CreatingCustomContainerViewControllers/CreatingCustomContainerViewControllers.html


1

你走在正确的道路上。但是你需要在故事板上永久地添加容器视图,然后你可以通过setHidden:方法来显示/隐藏它。

此外,你还可以使用这种方法动画显示第二个控制器。


你说得没错,但是这个应用程序的效果可能不会那么好... 我相信有一些代码可以在iPhone上呈现UIModalPresentationFormSheet。 - Mazen Kasser
@MazenKasser UIModalPresentationFormSheet 只在 iPad 上有效。你需要阅读苹果公司编写的 iOS UI 指南书籍。我认为你还没有阅读过。即使你找到了这样的方法,苹果也会限制你的应用程序,因为它不符合 UI 指南的要求。 - Alexander Perechnev
一切皆有可能,有大量的第三方库可以定制苹果的API。放心吧,苹果不会因为这种事情拒绝应用程序...顺便说一下,我自2009年以来就读过那本书了,孩子,你应该赶上了。 - Mazen Kasser
@MazenKasser 我们在谈论iPhone上的 UIModalPresentationFormSheet,是吗?放心,父亲,我只是说即使你找到了使用 UIModalPresentationFormSheet 的方法,苹果也会限制应用程序事件。这并没有涉及到第三方实现的问题。 - Alexander Perechnev

0
  1. 在 iPhone 和 iPod Touch 上,呈现的视图始终是全屏。因此,不能呈现非全屏的视图控制器。

  2. 不要呈现视图控制器,而是将视图控制器的视图作为子视图添加到父视图控制器中。因此,您可以控制其外观,甚至是其下方的阴影层。


概念是正确的,但代码的运行结果与预期不符。首先,子视图会被放置在根视图控制器的导航控制器下面,因此我必须将其隐藏并添加一个导航栏... 我想现在应该坚持使用自己的代码... 谢谢。 - Mazen Kasser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接