【问题标题】:Presenting a modal view controller without covering the current view on iPhone在不覆盖 iPhone 上的当前视图的情况下呈现模态视图控制器
【发布时间】:2013-12-05 02:36:23
【问题描述】:

我一直在尝试添加视图容器,并在两侧留出 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”!

标签: ios iphone uiviewcontroller ios7 childviewcontroller


【解决方案1】:

使用 MZFormSheetController "https://github.com/m1entus/MZFormSheetController" 带有酷炫视图转换的表单演示。 或者,iOS 8 及以上,你可以使用viewController.modalPresentationStyle = UIModalPresentationOverCurrentContext; 祝你好运,如果你想要一个完整的 sn-p,请告诉我......

【讨论】:

    【解决方案2】:

    你可以试试类似的,

    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

    【讨论】:

    • 当我展示 viewController 时它显示黑色背景。而且我认为 UIModalPresentationFormSheet 仅适用于 iPad!
    • 在 iOS 8 之后你可以做 viewController.modalPresentationStyle = UIModalPresentationOverCurrentContext;
    【解决方案3】:

    更好的方法是拥有自己的控制器和视图。

    在主控制器上使用当前视图控制器。

    [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
    

    添加为 childViewController 是为了包含视图控制器,当您想要一个具有多个视图的控制器时,每个控制器都有自己的控制器。

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

    【讨论】:

      【解决方案4】:

      你走对了。但是你必须在故事板上永久添加容器视图,然后你可以通过setHidden:方法显示/隐藏它。

      您还可以通过此方法显示第二个控制器。

      【讨论】:

      • 你是对的,但它不会像这个应用程序那样正确......我确信某处有代码可以在 iPhone 上呈现 UIModalPresentationFormSheet
      • @MazenKasser UIModalPresentationFormSheet 仅适用于 iPad。您必须阅读 Apple 编写的 iOS UI 指南。我想你还没有。即使你找到这样的方法,Apple 也会限制你的应用,因为它不是实现愿望的 UI 指南。
      • 一切皆有可能,有大量自定义 Apple API 的第三方库。放轻松,Apple 不会因为这样的事情拒绝该应用程序……顺便说一句,我从 2009 年开始就读过那本书,儿子,你应该赶上来
      • @MazenKasser 我们在 iPhone 中谈论的是UIModalPresentationFormSheet,对吗?放松父亲 我刚刚说过,如果您找到在 iPhone 上使用UIModalPresentationFormSheet 的方法,Apple 会限制应用程序事件。没有关于第 3 方实施的说法。
      【解决方案5】:
      1. 在 iPhone 和 iPod touch 上,呈现的视图始终是全屏的。因此,它不能呈现非全屏视图控制器。

      2. 不呈现视图控制器,将视图控制器的视图作为子视图添加到父视图控制器。所以,你可以控制外观,甚至是它下面的阴影层。

      【讨论】:

      • 这个概念是正确的,但代码不能按预期工作。首先,子视图位于根视图控制器的 navigationController 下,所以我不得不隐藏它并添加一个导航栏......我想我现在应该坚持我自己的代码......无论如何谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-13
      • 2016-06-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多