iOS:具有透明背景的Modal ViewController


180

我正在尝试以透明背景模态呈现视图控制器。我的目标是让呈现和呈现的视图控制器的视图同时显示。问题是,当演示动画结束时,演示视图控制器的视图消失。

- (IBAction)pushModalViewControllerButtonPressed:(id)sender
{
    ModalViewController *modalVC = [[ModalViewController alloc] init];
    [self presentViewController:modalVC animated:YES completion:nil];
}

我知道我可以将视图添加为子视图,但是出于某种原因,我想避免这种解决方案。我该如何解决?


4
@TheKing听起来像迈克尔一样,像我一样,希望模态视图是半透明的,在主视图(呈现)上显示为悬浮的凝胶层。与进行一些其他主要功能(在单独的视图中)相反,在进行快速设置时使用户感觉停留在当前上下文中。
罗勒·布尔克

这个stackoverflow.com/q/27598846/1603234让我微笑,现在轮到您了:)
Hemang 2014年

在此处查看我的答案stackoverflow.com/a/29794201/1606125对于iOS 8
Pankaj Wadhwa,2015年


1
对于iOS 10,工作的UIModalPresentationOverFullScreen如下面提到的inigo333所示。
Josef Rysanek '16

Answers:


97

以下代码仅适用于iPad。

self.view.backgroundColor = [UIColor clearColor];
self.modalPresentationStyle = UIModalPresentationCurrentContext;
[self presentModalViewController:modalVC animated:YES];

我会添加一个子视图。

这是一个很好的讨论。具体看一下评论。不只是答案。

模态视图

如果我是你,我不会做。我将添加一个子视图并执行此操作。看来我可以更好地控制事物。

编辑:

正如Paul Linsay所提到的,自iOS 8起,所需要的只是UIModalPresentationOverFullScreen用于呈现ViewController的modalPresentationStyle。这也将覆盖navigationBar和tabBar按钮。


18
确实可以在iOS 7和iPhone上使用,但必须modalPresentationStyle = UIModalPresentationCurrentContextpresenter视图控制器上指定,而不是在所显示的视图控制器上指定。
redent84 2014年

6
是的,它可以工作,但是仅当您在视图层次结构的较高层上 ViewController进行设置时才可以。(例如,a NavigationController或幻灯片菜单视图控制器的实例)。
iGranDav 2014年

4
奇怪的是,在我的情况下,它仅在将模式样式设置为UIModalPresentationCustom以及仅在将其设置为presentViewController而不是in 之后才起作用viewDidLoad
mojuba '16

5
从iOS 8开始,仅需要UIModalPresentationOverFullScreen即可呈现ViewController的modalPresentationStyle。
保罗·林赛

1
约1000次尝试后,我意识到你需要设置modalPresentationStyle 之前viewDidLoad。我是在构造函数中完成的,并且有效。
bentytree

186

对于那些试图使其在iOS 8中正常工作的人来说,显示透明模态视图控制器的“ Apple认可”方法是modalPresentationStyle 将当前ed控制器设置UIModalPresentationOverCurrentContext

这可以通过代码或通过在情节提要中设置segue的属性来完成。

从UIViewController文档中:

UIModalPresentationOverCurrentContext

一种表示样式,其中内容仅显示在父视图控制器的内容上。演示结束时,不会从视图层次结构中删除所呈现内容下方的视图。因此,如果显示的视图控制器未用不透明的内容填充屏幕,则基础内容将显示出来。

在弹出窗口中显示视图控制器时,仅当过渡样式为UIModalTransitionStyleCoverVertical时,才支持此显示样式。尝试使用其他过渡样式会触发异常。但是,如果父视图控制器不在弹出框中,则可以使用其他过渡样式(部分卷曲过渡除外)。

在iOS 8.0和更高版本中可用。

https://developer.apple.com/documentation/uikit/uiviewcontroller

WWDC 2014的“ iOS 8中的View Controller Advances”视频对此进行了详细介绍。

注意:

  • 请确保为您呈现的视图控制器提供清晰的背景色,以免实际上无法使其透明!
  • 您必须演示之前进行设置viewDidLoad在presentedViewController中设置此参数不会有任何影响

32
注-似乎您需要设置modalPresentationStyle的目标已更改。例如,在搭载iOS 7,得到这个工作,我需要设置modalPresentationStyle视图控制器(S),其试图打开该模式向UIModalPresentationCurrentContext。但是,要使其在iOS8中正常工作,我需要设置要显示在UIModalPresentationOverCurrentContext中的模态视图的modalPresentationStyle
u2Fan 2014年

1
如果在情节提要板中使用segue,则必须在此处设置演示样式。至少这对我有用。
朱利安·B。

我在呈现的视图控制器的init方法中添加了这三行代码,其工作方式就像一个魅力:self.providesPresentationContextTransitionStyle = YES; self.definesPresentationContext = YES; [self setModalPresentationStyle:UIModalPresentationOverCurrentContext];
inigo333 '16

2
在iOS 8+上,我必须从UINavigationController呈现一个模式,因此从孩子那里呈现并不能满足我的需求。相反,sourceVCself.navigationController。此外,只有将目标演示样式设置为自定义样式后,我才能看到它。[sourceVC setModalPresentationStyle:UIModalPresentationCurrentContext];[targetVC setModalPresentationStyle:UIModalPresentationCustom];希望对您有所帮助。
devdc

注-呼叫presentedVC.modalPresentationStyle = UIModalPresentationOverCurrentContext呈现 VC。在presentedVC中不起作用。相信我,我尝试过。
smileham

104

在iOS 8.0及更高版本中,可以通过将modalPresentationStyle属性设置为UIModalPresentationOverCurrentContext完成

//Set property **definesPresentationContext** YES to avoid presenting over presenting-viewController's navigation bar

self.definesPresentationContext = YES; //self is presenting view controller
presentedController.view.backgroundColor = [YOUR_COLOR with alpha OR clearColor]
presentedController.modalPresentationStyle = UIModalPresentationOverCurrentContext;

[self presentViewController:presentedController animated:YES completion:nil];

见所附图片


5
这是我可以使用的唯一解决方案。也非常简单。只需将其添加到模态搜索之前的演示VC中即可。
Siriss

1
Xcoe 9.2 / 11.2的iOS迅速.custom.overFullScreen工作。
胡锦涛

似乎如果您设置.overFullScreen了当前视图控制器,viewWillAppear则不会被调用。
胡锦涛

还有一两件事,presentedController.view.backgroundColor = #color#应该写在presentedControllerviewDidLoad,否则presentedController的生活被中断。
DawnSong

44

这段代码在iOS6和iOS7下的iPhone上运行良好:

presentedVC.view.backgroundColor = YOUR_COLOR; // can be with 'alpha'
presentingVC.modalPresentationStyle = UIModalPresentationCurrentContext;
[presentingVC presentViewController:presentedVC animated:YES completion:NULL];

在这种情况下,您会错过幻灯片动画。要保留动画,您仍然可以使用以下“非优雅”扩展名:

[presentingVC presentViewController:presentedVC animated:YES completion:^{
    [presentedVC dismissViewControllerAnimated:NO completion:^{
        presentingVC.modalPresentationStyle = UIModalPresentationCurrentContext;
        [presentingVC presentViewController:presentedVC animated:NO completion:NULL];
    }];
}];

如果我们的presentingV位于UINavigationController或UITabbarController的内部,则需要将该控制器作为presentingVC进行操作。

此外,在iOS7中,您可以实现自定义过渡动画应用UIViewControllerTransitioningDelegate协议。当然,在这种情况下,您可以获得透明背景

@interface ModalViewController : UIViewController <UIViewControllerTransitioningDelegate>

首先,在介绍之前,您必须进行设置 modalPresentationStyle

modalViewController.modalPresentationStyle = UIModalPresentationCustom;

然后,您必须实现两种协议方法

- (id<UIViewControllerAnimatedTransitioning>)animationControllerForPresentedController:(UIViewController *)presented presentingController:(UIViewController *)presenting sourceController:(UIViewController *)source
{
    CustomAnimatedTransitioning *transitioning = [CustomAnimatedTransitioning new];
    transitioning.presenting = YES;
    return transitioning;
}

- (id<UIViewControllerAnimatedTransitioning>)animationControllerForDismissedController:(UIViewController *)dismissed
{
    CustomAnimatedTransitioning * transitioning = [CustomAnimatedTransitioning new];
    transitioning.presenting = NO;
    return transitioning;
}

最后一件事是在CustomAnimatedTransitioning课堂上定义您的自定义过渡

@interface CustomAnimatedTransitioning : NSObject <UIViewControllerAnimatedTransitioning>
@property (nonatomic) BOOL presenting;
@end

@implementation CurrentContextTransitionAnimator

- (NSTimeInterval)transitionDuration:(id <UIViewControllerContextTransitioning>)transitionContext 
{
    return 0.25;
}

- (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext 
{
    UIViewController *fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
    UIViewController *toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];

    if (self.presenting) {
        // custom presenting animation
    }
    else {
        // custom dismissing animation
    }
}

7
确认这项工作。注意,如果您的viewController在navigationController内部,则还要确保它modalPresentationStyle也已设置!
mxcl 2013年

我认为在最常见的情况下,最好将导航控制器视为presentingVC。
malex 2013年

是的,使用此modalPresentationStyle无法获得演示动画((
malex 2014年

2
@alex是的,它很抱歉:我的错误是将presentPredantVC而不是prenstingVC的modalPresentationStyle设置为UIModalPresentationCurrentContext。
tiguero 2014年

5
@mxcl如果您的viewController的navigationController本身位于tabBarController内,请确保同时设置其modalPresentationStyle;)
Thomas CG de Vilhena

21

我在XCode 7的界面生成器方面有些挣扎,无法按照@VenuGopalTewari的建议设置演示样式。在这个版本中,似乎没有Over Current ContextOver Full Screen演示模式的SEGUE。因此,为了使其工作,我将模式设置为Default

在此处输入图片说明在此处输入图片说明

另外,我将模态呈现视图控制器的呈现模式设置为Over Full Screen

在此处输入图片说明


这对我有用,不需要任何代码。我正在使用Xcode 7.2,很快,目标是iOS 8.0
LightMan

这也对我有用。+1为正确答案。谢谢:)
奥古斯丁PA'6

最好的答案在这里!
ShinyuX 2013年

1
没有代码=最佳答案。巴斯蒂安(Bastian)赢得这场比赛。请所有人+1这个答案。
GeneCode

这个答案有效..花费了一个多小时的时间
user578386

18

创建一个要以模态方式呈现的序列并将该序列的Presentation属性设置为当前上下文,它将可以正常工作100%

在此处输入图片说明


3
我很欣赏100%的冲浪者,它奏效了!关键是将其应用于segue。非常感谢
Badr 2015年

如果您没有将segue挂接到按钮上,而是以编程方式调用它,则请确保设置一个标识符并调用performSegueWithIdentifier而不是presentViewController
2015年

1
我尝试了所有其他答案,但这是唯一在iOS9中对我有用的答案。
endavid

14

具有透明背景的PresentViewController-在iOS 8和iOS 9中

MYViewController *myVC = [self.storyboard   instantiateViewControllerWithIdentifier:@"MYViewController"];
    myVC.providesPresentationContextTransitionStyle = YES;
    myVC.definesPresentationContext = YES;
    [myVC setModalPresentationStyle:UIModalPresentationOverCurrentContext];
    [self.navigationController presentViewController:myVC animated:YES completion:nil];

并在MYViewController中将背景色设置为黑色并减少不透明度


12

这有点古怪,但是对我来说,这段代码有效(iOS 6):

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

[self presentViewController:self.signInViewController animated:YES completion:^{
    [self.signInViewController dismissViewControllerAnimated:NO completion:^{
        appDelegate.window.rootViewController.modalPresentationStyle = UIModalPresentationCurrentContext;
        [self presentViewController:self.signInViewController animated:NO completion:nil];
        appDelegate.window.rootViewController.modalPresentationStyle = UIModalPresentationFullScreen;

    }];
}];

此代码也可以在iPhone上使用


谢谢-正是我所需要的-在主主页顶部显示初始的“帮助”屏幕。美丽!
Matt H

1
今天,我花了将近3个小时来浏览和搜索适用于iOS7和iOS8的解决方案。考虑到这个答案已有1.5年的历史了,我正在使用ECSlidingViewController,这是唯一有效的解决方案!谢谢@Mak。
Centurion 2015年

完善。另外,如果您不关心动画,则内部完成中的3条线会完美工作,谢谢!
RasTheDestroyer'5

在花了3个小时没有获得任何成功之后,欢呼,希望我能投票更多:D
alessioarsuffi 2015年

11

这个类别对我有用(iOS 7、8和9)

H档

@interface UIViewController (navigation)
- (void) presentTransparentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion;
@end

M档

@implementation UIViewController (navigation)
- (void)presentTransparentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion
{
    if(SYSTEM_VERSION_LESS_THAN(@"8.0")) {
        [self presentIOS7TransparentController:viewControllerToPresent withCompletion:completion];

    }else{
        viewControllerToPresent.modalPresentationStyle = UIModalPresentationOverCurrentContext;
         [self presentViewController:viewControllerToPresent animated:YES completion:completion];
    }
}
-(void)presentIOS7TransparentController:(UIViewController *)viewControllerToPresent withCompletion:(void(^)(void))completion
{
    UIViewController *presentingVC = self;
    UIViewController *root = self;
    while (root.parentViewController) {
        root = root.parentViewController;
    }
    UIModalPresentationStyle orginalStyle = root.modalPresentationStyle;
    root.modalPresentationStyle = UIModalPresentationCurrentContext;
    [presentingVC presentViewController:viewControllerToPresent animated:YES completion:^{
        root.modalPresentationStyle = orginalStyle;
    }];
}
@end

1
我检查了所有答案..但对我来说,您的答案是完美的工作。.“ + 1”。@Ted
g212gs 2015年

1
我以为找不到解决方案。非常感谢!
CopperCash

10

使用swift解决此问题的方法如下。

let vc = MyViewController()
vc.view.backgroundColor = UIColor.clear // or whatever color.
vc.modalPresentationStyle = .overCurrentContext
present(vc, animated: true, completion: nil)

9

如果您使用的是Storyboard,则可以按照以下步骤操作:

  1. 添加视图控制器(V2),以所需方式设置UI
  • 添加一个UIView-将背景设置为黑色,将不透明度设置为0.5
  • 添加另一个UIView(2)-将用作您的弹出窗口(请注意,UIView和UIView(2)必须具有相同的级别/层次结构。不要使imageview成为视图的子级,否则uiview的不透明度会影响UIView(2))
  1. 以模态形式呈现V2

  2. 单击segue。在属性检查器中,将“演示文稿”设置为“全屏显示”。如果愿意,请删除动画

故事板

  1. 选择V2。在属性检查器中,将“演示文稿”设置为“全屏显示”。检查定义上下文并提供上下文

故事板

  1. 选择您的V2的MainView(请检查图像)。将backgroundColor设置为Clear Color

故事板


6

我在呈现的视图控制器的init方法中添加了以下三行内容,其工作方式很吸引人:

self.providesPresentationContextTransitionStyle = YES;
self.definesPresentationContext = YES;
[self setModalPresentationStyle:UIModalPresentationOverCurrentContext];

编辑(在iOS 9.3上工作):

self.modalPresentationStyle = UIModalPresentationOverFullScreen;

根据文档:

UIModalPresentationOverFullScreen 一种视图呈现样式,其中所呈现的视图覆盖屏幕。演示结束时,不会从视图层次结构中删除所呈现内容下方的视图。因此,如果显示的视图控制器未用不透明的内容填充屏幕,则基础内容将显示出来。

在iOS 8.0和更高版本中可用。


1
在iOS 10.2上工作。
Josef Rysanek '16

4

另一种方法是使用“容器视图”。只需将alpha设置为1以下并嵌入即可。XCode 5,目标是iOS7。在iPhone上测试。

在此处输入图片说明

可从iOS6获得容器视图。 链接到有关此的博客文章。


3

我创建了一个对象来处理所谓的“叠加模式”,这意味着它保留了背景视图,并允许您使用透明背景的模式。

它有一个简单的方法可以执行此操作:

- (void)presentViewController:(UIViewController *)presentedViewController
       fromViewController:(UIViewController *)presentingViewController
{
    presentedViewController.modalPresentationStyle = UIModalPresentationCustom;
    presentedViewController.transitioningDelegate = self;
    presentedViewController.modalPresentationCapturesStatusBarAppearance = YES;

    [presentedViewController setNeedsStatusBarAppearanceUpdate];

    [presentingViewController presentViewController:presentedViewController
                                       animated:YES
                                     completion:nil];
}

如果您提供的视图控制器具有,则将modalPresentationCapturesStatusBarAppearance属性设置为YES并强制更新状态栏外观很重要preferredStatusBarStyle

该对象应该有一个 @property (assign, nonatommic) isPresenting

您希望该对象遵守UIViewControllerAnimatedTransitioningUIViewControllerTransitioningDelegate协议,并实现以下方法:

- (id)animationControllerForPresentedController:(UIViewController *)presented
                           presentingController:(UIViewController *)presenting
                               sourceController:(UIViewController *)source
{
    self.isPresenting = YES;

    return self;
}

- (id)animationControllerForDismissedController:(UIViewController *)dismissed
{
    self.isPresenting = NO;

    return self;
}

和:

- (NSTimeInterval)transitionDuration:(id)transitionContext
{
    return 0.25;
}

- (void)animateTransition:(id)transitionContext
{
    UIViewController* firstVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
    UIViewController* secondVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
    UIView* containerView = [transitionContext containerView];
    UIView* firstView = firstVC.view;
    UIView* secondView = secondVC.view;

    if (self.isPresenting) {
        [containerView addSubview:secondView];
        secondView.frame = (CGRect){
            containerView.frame.origin.x,
            containerView.frame.origin.y + containerView.frame.size.height,
            containerView.frame.size
        };

        firstView.tintAdjustmentMode = UIViewTintAdjustmentModeDimmed;
        [UIView animateWithDuration:0.25 animations:^{
            secondView.frame = containerView.frame;
        } completion:^(BOOL finished) {
            [transitionContext completeTransition:YES];
        }];
        } else {
        [UIView animateWithDuration:0.25 animations:^{
            firstView.frame = (CGRect){
                containerView.frame.origin.x,
                containerView.frame.origin.y + containerView.frame.size.height,
                containerView.frame.size
        };

        } completion:^(BOOL finished) {
            [transitionContext completeTransition:YES];
        }];
    }
}

这会做一个从底部滑动的动画,模仿默认的模态动画,但是您可以根据需要进行制作。

重要的是,呈现视图控制器的视图将保留在后面,让您创建透明效果。

此解决方案适用于iOS 7+


感谢您的回答。
Salman Khakwani

3

一种非常简单的方法(Storyboards例如,使用)是:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"SomeStoryboard" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"SomeStoryboardViewController"];
// the key for what you're looking to do:
vc.modalPresentationStyle = UIModalPresentationOverCurrentContext;
vc.view.alpha = 0.50f;

[self presentViewController:vc animated:YES completion:^{
    // great success
}];

这将呈现UIViewController一个Storyboard模态,但有一个半透明的背景。


3

适用于iOS 7-10

if #available(iOS 8.0, *) {
    nextVC.modalPresentationStyle = .OverCurrentContext
    self.presentViewController(nextVC, animated: true, completion: nil)
} else {
    // Fallback on earlier version
    self.modalPresentationStyle = .Custom          
    nextVC.modalTransitionStyle = .CrossDissolve            
    self.presentViewController(nextVC, animated: false, completion: nil)
    }
}

2

总结一下所有好的答案和评论,并在制作新动画的同时保持动画效果,ViewController这就是我所做的:(支持iOS 6及更高版本)

如果您使用UINavigationController\,UITabBarController这就是方法:

    SomeViewController *vcThatWillBeDisplayed = [self.storyboard instantiateViewControllerWithIdentifier:@"SomeVC"];

    vcThatWillBeDisplayed.view.backgroundColor = [UIColor colorWithRed: 255/255.0 green:255/255.0 blue:255/255.0 alpha:0.50];    

    self.navigationController.modalPresentationStyle = UIModalPresentationCurrentContext;
    [self presentViewController:presentedVC animated:YES completion:NULL];

如果这样做,将会丢失modalTransitionStyle动画。为了解决这个问题,您可以轻松地在您的SomeViewController班级中添加以下内容:

-(void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    [UIView animateWithDuration:0.4 animations:^() {self.view.alpha = 1;}
       completion:^(BOOL finished){}];
}
- (void)viewDidLoad
{
    [super viewDidLoad];
    self.view.alpha = 0;
}

2

当然,您应该设置UIModalPresentationCurrentContext,但是设置clearColor的位置也很重要!您不能在viewDidLoad函数中设置背景,不能像在根视图控制器或将要呈现的控制器的init函数中那样在视图加载之前设置背景!

actionController.view.backgroundColor = [UIColor clearColor];
[self presentViewController:actionController animated:YES completion:nil];

要么

- (instancetype)init {

    self = [super initWithNibName:nil bundle:nil];

    if(self) {
        self.modalPresentationStyle = UIModalPresentationOverCurrentContext;
        [self.view setBackgroundColor:[UIColor clearColor]];
    }

    return self;
}

这是对我的帮助。谢谢你的帮助。
Tomasz Nazarenko,

1

如果您正在使用模态segue,请确保将其设置为此图像(如果需要,可以关闭动画)在此处输入图片说明


1

在iOS 7和iOS 8上测试的完整方法。

@interface UIViewController (MBOverCurrentContextModalPresenting)

/// @warning Some method of viewControllerToPresent will called twice before iOS 8, e.g. viewWillAppear:.
- (void)MBOverCurrentContextPresentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion;

@end

@implementation UIViewController (MBOverCurrentContextModalPresenting)

- (void)MBOverCurrentContextPresentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion {
    UIViewController *presentingVC = self;

    // iOS 8 before
    if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_7_1) {
        UIViewController *root = presentingVC;
        while (root.parentViewController) {
            root = root.parentViewController;
        }

        [presentingVC presentViewController:viewControllerToPresent animated:YES completion:^{
            [viewControllerToPresent dismissViewControllerAnimated:NO completion:^{
                UIModalPresentationStyle orginalStyle = root.modalPresentationStyle;
                if (orginalStyle != UIModalPresentationCurrentContext) {
                    root.modalPresentationStyle = UIModalPresentationCurrentContext;
                }
                [presentingVC presentViewController:viewControllerToPresent animated:NO completion:completion];
                if (orginalStyle != UIModalPresentationCurrentContext) {
                    root.modalPresentationStyle = orginalStyle;
                }
            }];
        }];
        return;
    }

    UIModalPresentationStyle orginalStyle = viewControllerToPresent.modalPresentationStyle;
    if (orginalStyle != UIModalPresentationOverCurrentContext) {
        viewControllerToPresent.modalPresentationStyle = UIModalPresentationOverCurrentContext;
    }
    [presentingVC presentViewController:viewControllerToPresent animated:YES completion:completion];
    if (orginalStyle != UIModalPresentationOverCurrentContext) {
        viewControllerToPresent.modalPresentationStyle = orginalStyle;
    }
}

@end

1

斯威夫特4.2

guard let someVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "someVC") as? someVC else {
    return
}
someVC.modalPresentationStyle = .overCurrentContext

present(someVC, animated: true, completion: nil)

0

在appdelegate中:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [[_window rootViewController]setModalPresentationStyle:UIModalPresentationCurrentContext];
    return YES;
}

在您必须从中加载下一个视图的第一个视图控制器中:

  NextViewController *customvc = [[NextViewController alloc]init];
    [self presentViewController:customvc animated:YES completion:^{

    }];

在您要添加透明的nextViewController中:

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor clearColor];
    UIView* backView = [[UIView alloc] initWithFrame:self.view.frame];
    backView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.6];
    [self.view insertSubview:backView atIndex:0];
}

0

登录屏幕是模态的,这意味着它位于前一个屏幕的顶部。到目前为止,我们已经模糊了背景,但是它并没有模糊任何东西。它只是一个灰色的背景。

我们需要正确设置模态。

图片链接目标

  • 首先,我们需要将View Controller的View背景更改为Clear color。它只是意味着它应该是透明的。默认情况下,该视图为白色。

  • 其次,我们需要选择进入登录屏幕的Segue,然后在“属性”检查器中,将“表示”设置为“当前上下文”。该选项仅在启用“自动版面设计”和“尺寸类别”时可用。

图片链接目标


0

将导航设置modalPresentationStyleUIModalPresentationCustom

并将您显示的视图控制器的背景色设置为透明色。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.