【发布时间】:2014-08-14 17:19:42
【问题描述】:
当我按下视图控制器上的按钮时,我想在它上面显示另一个控制器,但在中间而不是全屏。
我怎样才能以这种方式在另一个控制器之上展示一个控制器?
【问题讨论】:
标签: ios xcode ios7 uistoryboard
当我按下视图控制器上的按钮时,我想在它上面显示另一个控制器,但在中间而不是全屏。
我怎样才能以这种方式在另一个控制器之上展示一个控制器?
【问题讨论】:
标签: ios xcode ios7 uistoryboard
如果您在 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中声明方法。
【讨论】:
您需要在呈现之前将此属性设置为您的控制器。
controller.modalPresentationStyle = UIModalPresentationFormSheet;
[self presentViewController:controller animated:YES completion:nil];
【讨论】:
是的,您可能必须用动画呈现视图控制器视图。请参考以下代码。你会知道它从屏幕底部到屏幕中间的动画显示。
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];
}];
【讨论】:
在 iPhone 中,呈现UIViewController 始终是全屏显示。在 iPad 上,您可以使用 UISplitViewController 或构建自定义容器,但您提供的视图控制器将填充 UISplitViewController 和自定义容器控制器中的容器。
要仅在屏幕的一部分上显示内容,您可以将UIView 动画化到您的视图控制器上。有一些方法可以展示一个视图控制器,但仍然有另一个视图控制器显示在它后面,但不建议这样做。
查看this other question 了解有关创建自定义容器视图控制器的更多信息。
【讨论】: