我想以模态方式添加一个透明背景的视图控制器,因此可以看到下方的父视图控制器。 (这适用于iPhone,不适用于iPad。)
我试过这个:
TextFieldViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"TextFieldVC"];
vc.modalPresentationStyle = UIModalPresentationCurrentContext;
vc.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self.navigationController presentViewController:vc animated:YES completion:^{}];
没有运气,给视图控制器一个清晰的色彩背景。如果改变了任何内容,我的视图控制器就在故事板中。
答案 0 :(得分:12)
@Josh Kahane
在-ViewDidLoad
处设置将使用此代码显示透明视图控制器的视图控制器
并确保将UIViewController
视图的Alpha通道设置为低于1。
代码:
self.modalPresentationStyle = UIModalPresentationCurrentContext;
答案 1 :(得分:7)
我一直在寻找解决方案。现在感谢iOS 8.他们推出了几个新的modalPresentationStyle。其中一个是UIModalPresentationOverCurrentContext。使用相同的方法来解决这个问题。
viewcontroller.modalPresentationStyle = UIModalPresentationOverCurrentContext;
希望这有帮助。
答案 2 :(得分:7)
为了完整性并使其保持最新,我还在为Swift添加解决方案:
<强>或者强>
viewController.modalPresentationStyle = .CurrentContext
being - 一种演示风格,其中内容仅显示在呈现视图控制器的内容上。
或强>
viewController.modalPresentationStyle = .OverCurrentContext
being - 一种演示文稿样式,其中内容仅显示在父视图控制器的内容上。演示文稿完成后,不会从视图层次结构中删除所显示内容下方的视图。因此,如果呈现的视图控制器没有用不透明的内容填充屏幕,则底层内容会显示出来。
取决于演示文稿的要求和环境。
答案 3 :(得分:5)
虽然有很多步骤很容易被遗忘,但这是可能的。在与我自己努力工作4小时后,我想出了以下解决方案。
1 - 像创建任何其他视频控制器一样创建视图控制器。
标头文件
#import "DDBaseViewController.h"
@interface DDHomeSearchLoadingViewController : UIViewController
@end
实施文件
#import "DDHomeSearchLoadingViewController.h"
@interface DDHomeSearchLoadingViewController ()
@property (weak, nonatomic) IBOutlet UIActivityIndicatorView *activityMonitor;
@property (weak, nonatomic) IBOutlet UIView *modalView;
@end
@implementation DDHomeSearchLoadingViewController
#pragma mark - UIViewController lifecycle
- (void)viewDidLoad
{
[super viewDidLoad];
[self setupUI];
}
-(void) setupUI
{
[self makeRoundedCorner:self.modalView AndCornerRadius:6.0f];
[self.activityMonitor startAnimating];
}
-(void) makeRoundedCorner:(UIView*) view AndCornerRadius:(float) cornerRadius
{
[view.layer setCornerRadius:cornerRadius];
[view.layer setMasksToBounds:YES];
}
@end
2 - 将容器视图背景颜色设置为ClearColor
3 - 添加一个UIView,它将呈现为叠加
4 - 添加一个UIView,它将在叠加层UIView上显示为对话框
添加/移动叠加视图时,请确保它在叠加视图之外。出于某种原因,当您使用鼠标移动它时,它会自动添加到覆盖UIView。 (说实话,这很烦人)
5 - 为您已创建的视图设置故事板ID
6 - 最后将这段代码添加到您无法调用的地方(假设它也是UiViewController)
DDHomeSearchLoadingViewController* ddHomeSearchLoadingViewController = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"DDHomeSearchLoadingViewController"];
self.navigationController.modalPresentationStyle = UIModalPresentationCurrentContext;
[self presentViewController:ddHomeSearchLoadingViewController animated:YES completion:nil];
我希望它可以帮助你们
干杯
答案 4 :(得分:1)
斯威夫特3 -
尝试let vc = self.storyboard!.instantiateViewControllerWithIdentifier("ExampleViewController") as! ExampleViewController
vc.view.backgroundColor = UIColor.clearColor()
vc.modalPresentationStyle = .overFullScreen
self.presentViewController(vc, animated: true, completion: nil)
<body onbeforeunload="return dontgo()">
<a href="http://google.com">Leave the page </a>
<script>
function dontgo(){
return "are you sure you want to leave";
}
</script>
答案 5 :(得分:1)
Swift 5的答案。
TransparentViewController
self.view.backgroundColor = .clear
PresentingViewController
let viewController = TransparentViewController()
viewController.modalPresentationStyle = .overFullScreen
navigationController.present(viewController, animated: false)
答案 6 :(得分:0)
UIStoryboard *story = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
ChooseController *sec=[story instantiateViewControllerWithIdentifier:@"Controller"];
sec.modalPresentationStyle = UIModalPresentationOverCurrentContext;
sec.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentViewController:sec animated:YES completion:^{
}];
注意:当前控制器超级视图alpha值必须低于1,如0.5 alpha那样。
答案 7 :(得分:0)
答案 8 :(得分:-1)
当你以模态方式呈现一个视图控制器时,它会进入堆栈,而堆栈又隐藏在它下面的视图控制器。因此,您所能做的就是呈现一个透明视图,其动画类似于以模态方式呈现视图控制器。