【问题标题】:ios7 - showing a view controller on top of another but not in full screenios7 - 在另一个之上显示一个视图控制器但不是全屏
【发布时间】:2014-08-14 17:19:42
【问题描述】:

当我按下视图控制器上的按钮时,我想在它上面显示另一个控制器,但在中间而不是全屏。

我怎样才能以这种方式在另一个控制器之上展示一个控制器?

【问题讨论】:

    标签: ios xcode ios7 uistoryboard


    【解决方案1】:

    如果您在 iPad 上尝试,您始终可以设置一个包含新视图的 Popover。

    UIYourNewViewController *vc = [[UIYourNewViewController alloc] init];
    
    UIPopoverController *popVc = [[UIPopoverController alloc] initWithContentViewController:vc];
    [popVc setPopoverContentSize:*the size that you want or your resized vc*];
    [popVc presentPopoverFromRect:*position of the screen you want to show the popover* inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
    

    这样,您将创建一个与视图控制器的视图大小相同的 Popover,您可以将其弹出到您想要的位置。 为了确保它也能在 iPhone 上运行,你应该为 UIPopoverController 创建一个类别并将这个方法添加到 .m

    + (BOOL)_popoversDisabled {
    return NO;
    

    }

    记得在类的.h中声明方法。

    【讨论】:

    • 此解决方案在 iOS8 中不再有效。在这种情况下,它将打开一个与屏幕大小相同的 ModalViewController。
    【解决方案2】:

    您需要在呈现之前将此属性设置为您的控制器。

    controller.modalPresentationStyle = UIModalPresentationFormSheet;
    [self presentViewController:controller animated:YES completion:nil];
    

    【讨论】:

      【解决方案3】:

      是的,您可能必须用动画呈现视图控制器视图。请参考以下代码。你会知道它从屏幕底部到屏幕中间的动画显示。

      YourViewController *viewController = [[YourViewController alloc] init];
          [viewController.view setFrame:CGRectMake(0, -(CGRectGetHeight(viewController.view.frame)), CGRectGetWidth(viewController.view.frame), CGRectGetHeight(self.view.frame))];
      
          [self.view addSubview:viewController.view];
          [UIView animateWithDuration:0.8 animations:^{
      
              [viewController.view setFrame:CGRectMake(0, 0, CGRectGetWidth(viewController.view.frame), CGRectGetHeight(viewController.view.frame))];
      
          } completion:^(BOOL finished) {
              [self.navigationController pushViewController:viewController animated:NO];
          }];
      

      【讨论】:

        【解决方案4】:

        在 iPhone 中,呈现UIViewController 始终是全屏显示。在 iPad 上,您可以使用 UISplitViewController 或构建自定义容器,但您提供的视图控制器将填充 UISplitViewController 和自定义容器控制器中的容器。

        要仅在屏幕的一部分上显示内容,您可以将UIView 动画化到您的视图控制器上。有一些方法可以展示一个视图控制器,但仍然有另一个视图控制器显示在它后面,但不建议这样做。

        查看this other question 了解有关创建自定义容器视图控制器的更多信息。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-26
          • 2018-07-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多