当我按下视图控制器上的按钮时,我想在它上面显示另一个控制器,但是在中间而不是全屏。
我怎样才能以这种方式在另一个控制器上呈现控制器?
答案 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。