我认为我希望以标准方式向用户呈现(从屏幕底部向上滑动)。大约一半的视图是透明背景,下半部分有一些输入字段(想象键盘弹出的方式)。当我在rootViewController上调用[self presentViewController]
时,它会向上滑动视图,但是大约半秒后,视图过去是透明的,而是用黑色代替。这与presentViewController和presentModalViewController都会发生。如何改变这种行为?
答案 0 :(得分:21)
这是可能的,rockybalboa在raywenderlich.com上的论坛帖子中提供了解决此问题的方法:
iOS 8 UIModalPresentationCurrentContext is not transparent?
该解决方案引用了巴尔博亚的回答,在Objective-C中:
在iOS 8之前,您可以这样做:
[backgroundViewController setModalPresentationStyle:UIModalPresentationCurrentContext];
[backgroundViewController presentViewController:_myMoreAppsViewController animated:NO completion:nil];
在iOS 8中,你必须这样做:
backgroundViewController.providesPresentationContextTransitionStyle = YES;
backgroundController.definesPresentationContext = YES;
[overlayViewController setModalPresentationStyle:UIModalPresentationOverCurrentContext];
用Swift等价物补充上述代码:
backgroundViewController.providesPresentationContextTransitionStyle = true
backgroundController.definesPresentationContext = true
overlayViewController.modalPresentationStyle = .OverCurrentContext
使用Swift 1.2在iOS 8.1上使用Xcode 6.3 beta 3实现了这一功能,它运行良好。
只是评论我在查找和尝试Ray Wenderlich论坛解决方案之前,已经查看了三个不同的SO问题 - 现在标记为重复的 -
。答案 1 :(得分:3)
据我所知,当您展示模型视图控制器时,不支持透明背景。尝试将控制器保留在根视图控制器中,只需将子视图添加到根视图控制器即可。
答案 2 :(得分:0)
最后,看起来它不可能是透明的,我通过将这个视图添加为根视图控制器边界之外的子视图来解决这个问题,然后使用动画块。不是很多额外的代码,但能够使用标准的iOS行为来做它会很好。
答案 3 :(得分:0)
在使用
创建控制器时,在短暂延迟后出现黑色背景时出现类似问题 Disclaimer *vc = [[Disclaimer alloc]init];
解决这个问题的方法是在IB中创建一个相应的对象,并使用它的故事板ID实例化viewcontroller:
Disclaimer *vc = (Disclaimer *)[self.storyboard instantiateViewControllerWithIdentifier:@"SBIDDisclaimer"];
[self presentViewController:vc animated:YES completion:nil];
我想通过IB做这件事会做一些额外的初步修改。