透明的ViewController看到下面的父母?

时间:2012-12-02 10:44:18

标签: iphone objective-c uiviewcontroller transparency

我想以模态方式添加一个透明背景的视图控制器,因此可以看到下方的父视图控制器。 (这适用于iPhone,不适用于iPad。)

我试过这个:

TextFieldViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"TextFieldVC"];
vc.modalPresentationStyle = UIModalPresentationCurrentContext;
vc.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self.navigationController presentViewController:vc animated:YES completion:^{}];

没有运气,给视图控制器一个清晰的色彩背景。如果改变了任何内容,我的视图控制器就在故事板中。

9 个答案:

答案 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

enter image description here

3 - 添加一个UIView,它将呈现为叠加

enter image description here

4 - 添加一个UIView,它将在叠加层UIView上显示为对话框

添加/移动叠加视图时,请确保它在叠加视图之外。出于某种原因,当您使用鼠标移动它时,它会自动添加到覆盖UIView。 (说实话,这很烦人)

enter image description here

5 - 为您已创建的视图设置故事板ID

enter image description here

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)

您只需在以下选项中进行操作,并减少父母视图的不透明度即可在情节提要中进行更改。使用Storyboard:无需编写任何代码即可实现

enter image description here

答案 8 :(得分:-1)

当你以模态方式呈现一个视图控制器时,它会进入堆栈,而堆栈又隐藏在它下面的视图控制器。因此,您所能做的就是呈现一个透明视图,其动画类似于以模态方式呈现视图控制器。