21

我想模态地添加一个具有透明背景的视图控制器,以便可以看到下面的父视图控制器。(这是在 iPhone 的应用程序中,而不是在 iPad 上。)

我试过这个:

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

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

4

9 回答 9

15

@Josh Kahane 设置视图控制器,该控制器将在此处显示带有此代码的透明视图控制器,-ViewDidLoad 并确保将UIViewController视图的 alpha 通道设置为低于 1。

代码:

self.modalPresentationStyle = UIModalPresentationCurrentContext;
于 2012-12-02T11:54:59.260 回答
7

我一直在寻找解决方案。现在感谢 iOS 8。他们引入了几个新的 modalPresentationStyle。其中之一是 UIModalPresentationOverCurrentContext。使用相同的方法来解决此问题。

viewcontroller.modalPresentationStyle = UIModalPresentationOverCurrentContext;

希望这可以帮助。

于 2014-11-19T13:57:46.183 回答
7

为了完整性和更新,我还为 Swift 添加了解决方案:

任何一个

viewController.modalPresentationStyle = .CurrentContext 

being -一种显示样式,其中内容仅显示在呈现视图控制器的内容上。

或者

viewController.modalPresentationStyle = .OverCurrentContext

being -内容仅显示在父视图控制器的内容上的演示样式。演示结束时,所呈现内容下方的视图不会从视图层次结构中删除。因此,如果呈现的视图控制器没有用不透明的内容填充屏幕,则底层内容会显示出来。

根据演示文稿的要求和情况而定。

于 2015-07-29T10:12:11.690 回答
6

尽管有很多步骤很容易忘记,但这是可能的。在努力让自己工作 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 - 为您创建的视图设置 Storyboard ID

在此处输入图像描述

6 - 最后在你不想调用它的地方添加这段代码(假设它也是一个 UiViewController )

DDHomeSearchLoadingViewController* ddHomeSearchLoadingViewController = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"DDHomeSearchLoadingViewController"];
self.navigationController.modalPresentationStyle = UIModalPresentationCurrentContext;
[self presentViewController:ddHomeSearchLoadingViewController animated:YES completion:nil];

我希望它可以帮助你们

干杯

于 2014-02-19T03:50:40.333 回答
1

斯威夫特 3 -

尝试vc.modalPresentationStyle = .overFullScreen

let vc = self.storyboard!.instantiateViewControllerWithIdentifier("ExampleViewController") as! ExampleViewController
vc.view.backgroundColor = UIColor.clearColor()
vc.modalPresentationStyle = .overFullScreen
self.presentViewController(vc, animated: true, completion: nil)
于 2018-05-02T11:42:41.933 回答
1

Swift 5 的答案。

透明视图控制器

self.view.backgroundColor = .clear

呈现视图控制器

let viewController = TransparentViewController()
viewController.modalPresentationStyle = .overFullScreen
navigationController.present(viewController, animated: false)
于 2020-07-02T11:48:54.590 回答
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:^{}];

注意:当前控制器 superview alpha 值必须低于 1,就像 0.5 alpha 一样。

于 2017-04-19T13:50:35.173 回答
0

您可以通过执行以下选项并减少父母视图不透明度来更改情节提要。使用情节提要:无需编写任何代码即可实现此目的

在此处输入图像描述

于 2018-06-25T10:14:19.970 回答
-2

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

于 2012-12-02T10:51:07.247 回答