ios7 - 将视图控制器显示在另一个视图控制器之上,但不是全屏显示

时间:2014-06-24 12:32:27

标签: ios xcode ios7 uistoryboard

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

我怎样才能以这种方式在另一个控制器上呈现控制器?

4 个答案:

答案 0 :(得分:2)

如果您在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中声明方法。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

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];
    }];

答案 3 :(得分:0)

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

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

有关创建自定义容器视图控制器的详细信息,请查看this other question