【问题标题】:iOS : ModalView with background transparent?iOS:背景透明的模态视图?
【发布时间】:2014-02-13 17:02:26
【问题描述】:

我想在 viewController 上显示一个模态视图。 (它有一个导航控制器)。

在我看来,我有文本和一个显示模态视图的按钮。

我创建了一个 .xib,其中包含我的模态视图(它是一个带有图像和标签的视图)。

当我展示它时:

ShareController *controller =  [[ShareController alloc] initWithNibName:@"ShareController" bundle: nil];
controller.view.backgroundColor = [UIColor clearColor];
controller.modalPresentationStyle = UIModalPresentationFormSheet;
controller.modalTransitionStyle = UIModalTransitionStyleCoverVertical;

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

我有我的模态视图,但是,背景变黑了.. 我想总是看到我视图上的文本。 (我试图设置 alpha 等。但没有运行:'()

有人帮我吗?

谢谢,

【问题讨论】:

  • "当您以模态方式呈现视图控制器(透明)时,它下面除了应用程序窗口之外什么都没有,它是黑色的。iOS 7 引入了一种新的模态呈现样式,导致 iOS 不会删除下面的视图呈现的视图控制器(你必须提供一个转换委托)“..你有一个例子:github.com/hightech/…
  • 查看my answer here 以获得适用于 iOS 7 和 8 的解决方案

标签: ios objective-c background modalviewcontroller


【解决方案1】:

使用以下 sn-p 在 iOS 8 及更高版本上执行此操作:

对于目标 C:

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

对于 Swift 2:

let viewController : XYZViewController =     self.storyboard!.instantiateViewControllerWithIdentifier(“XYZIdentifier”) as! XYZViewController
viewController.providesPresentationContextTransitionStyle = true
viewController.definesPresentationContext = true
viewController.modalPresentationStyle=UIModalPresentationStyle.OverCurrentContext
self.presentViewController(viewController, animated: true, completion: nil)

对于 Swift 4:

let viewController =  self.storyboard!.instantiateViewController(withIdentifier:  "XYZIdentifier") as! XYZViewController
viewController.providesPresentationContextTransitionStyle = true
viewController.definesPresentationContext = true
viewController.modalPresentationStyle = .overCurrentContext
self.present(viewController, animated: true, completion: nil)

你呈现的 viewController 的背景色应该是 clearColor。

【讨论】:

  • 这个支持iOS 7吗?
  • 但这不包括导航栏
  • @RanganathaGV 它涵盖了所有内容。你一定是做错了什么。
【解决方案2】:

您可以查看 iOS7 示例(请参阅我的通讯),或者您可以简单地试试这个:

从你的“展示”方法中删除这一行

controller.view.backgroundColor = [UIColor clearColor];

现在,在ShareController 的 viewDidLoad 中添加:

 self.view.backgroundColor = [UIColor clearColor];
 self.modalPresentationStyle = UIModalPresentationCurrentContext;
 self.modalPresentationStyle = UIModalPresentationFormSheet;

PS

如果你有一个 navigationController... 使用

[self.navigationController presentViewController:controller animated:YES completion:nil];

【讨论】:

  • 我只有一个问题,当我显示我的模态视图时,我没有过渡:/ 当我关闭它时,我只有一个垂直过渡。
  • 是的,我知道... :( 这只是一个“hack”;对于动画 - 使用@matt 的解决方案或来自 github 的其他示例
  • 我看到有“UIActivityViewController”,我们不能将它用于模态视图? (用于社交分享)
  • 这在 iOS 8 上对我不起作用。动画有效,但视图出现后,背景又变回黑色。
【解决方案3】:

如果您希望您的 modalVC 位于标签栏上方,您需要将演示样式定义为 UIModalPresentationOverFullScreen

[_presentedViewController setModalPresentationStyle:UIModalPresentationOverFullScreen];

[_presentingViewController presentViewController:_presentedViewController animated:YES completion:nil];

【讨论】:

    【解决方案4】:

    快速的答案是你不能呈现透明的模态视图,而不是使用 presentViewController:animated:completion: 方法。因为你不能让模态视图控制器透明(你的视图是放在上面的)。

    您可以制作自定义视图,也可以手动为其设置动画,这是一种创建所需内容的方法。

    【讨论】:

    • 在 iOS 7 中可以使用自定义过渡。
    • 如果我理解的话,这是不可能的,因为当我显示模态视图时,此窗口位于“顶部”,因此,我的其他视图被隐藏了?
    • 你刚才说它在显示视图的顶部。这意味着有可能,当模态动画完成时,iOS 将呈现视图 alpha 设置为零,这就是你得到黑色背景的原因。
    【解决方案5】:

    PresentingViewController 中,将以下代码复制到storyboard segue 或IBAction 下。

    SecondViewController *viewController = [self.storyboard   instantiateViewControllerWithIdentifier:@"secondViewController"];
    //SecondViewController *viewController = [SecondViewController alloc]init]; // if you are adding the viewcontroller programatically
    viewController.modalPresentationStyle = UIModalPresentationOverCurrentContext;
        [viewController setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
    [self presentViewController:viewController animated:YES completion:nil];
    

    在第二个ViewController 中,通过情节提要或代码执行以下步骤:

    1. 将视图的 (self.view) 背景色设置为 clearcolor 并将不透明度降低到 50%
    2. 现在可以实现半透明的模态视图

    【讨论】:

      【解决方案6】:

      UIWindow's颜色,你可以在appDelegate中初始化UIWindow颜色。

      - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
          // Override point for customization after application launch.
          self.window.backgroundColor = [UIColor whiteColor];
          return YES;
      }
      

      【讨论】:

      • 或创建一个 UIVIEW
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-24
      • 2015-02-24
      • 1970-01-01
      • 1970-01-01
      • 2013-09-28
      • 1970-01-01
      相关资源
      最近更新 更多