我正在尝试在iOS 7和iOS 8上呈现具有透明背景的viewcontroller。 只需将viewcontroller的modalPresentationStyle属性更改为FormSheet,我就可以在iOS 7.1上使用它。
我想要的是在ios7 +上的通用方法
我尝试过使用modalPresentationStyle的其他选项,例如:OverCurrentContext,CurrentContext和PageSheet。
我也试过使用modalPresentationStyle.Custom,但没有取得任何成功。
如果有任何帮助,我有NavigationController。
呈现视图控制器的代码:
InfoViewController *info = [[InfoViewController alloc] initWithNibName:@"InfoViewController" bundle:nil];
[self presentViewController:info animated:YES completion:nil];
所呈现的ViewController的viewDidLoad代码(我认为这与此有关):
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
self.modalPresentationStyle = UIModalPresentationStyle.PageSheet
}
我正在使用swift和Xcode 6。 这是我现在和我想要的截图:
以下是一个示例代码:https://github.com/pbassut/TransBackgroundViewController
答案 0 :(得分:18)
对于那些在呈现UIViewController之前仍然存在此问题的人,将呈现的UIViewController的modalPresentationStyle设置为.Custom,它将在iOS 8(Xcode 6.1)上运行。也就是说,你应该在呈现UIViewController
中设置它答案 1 :(得分:11)
我尝试过这个解决方案,它适用于iOS 7和8:
if (UIDevice.currentDevice().systemVersion.integerValue >= 8)
{
//For iOS 8
presentingViewController.providesPresentationContextTransitionStyle = true;
presentingViewController.definesPresentationContext = true;
presentedViewController.modalPresentationStyle = UIModalPresentationOverCurrentContext;
}
else
{
//For iOS 7
presentingViewController.modalPresentationStyle = UIModalPresentationCurrentContext;
}
注意: 请注意' presentsViewController '和' presentsViewController '之间的区别。
答案 2 :(得分:6)
我能够在没有代码的情况下实现这一目标:
在故事板中,在呈现视图控制器上(即在您想要透明的那个之前),转到属性检查器。在该选项卡上,有“定义上下文”和“提供上下文”的复选框。检查那些。
在segue上,将其设置为“当前模态”。
在目的地/呈现的视图控制器上,转到属性选项卡。在“Presentation”下拉列表中,选择“Over Current Context”。
在目标视图控制器上,将其视图设置为具有清晰背景。
在目标视图控制器上,打下2个UIViews:一个是你的“透明”,另一个是你的“内容”。将透明的一个设置为您喜欢的任何alpha,并将所有垃圾放入“内容”中。
答案 3 :(得分:5)
以上都不适合我。为了在iOS 10上运行,我只需:
presented.modalPresentationStyle = .overFullScreen
presenting.present(presented, animated: true)
然后将呈现的视图控制器的根视图设置为透明或半透明颜色。不要更改其alpha或其所有子视图将具有相同的alpha。
答案 4 :(得分:4)
通过以下步骤,我在Swift 2.0中实现了各种样式的透明化。分析它以与您的代码兼容。
当按钮单击主视图控制器时,透视视图控制器(模态视图控制器)由segue启动。
Segue设置:
在主视图控制器中:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
{
let vc = segue.destinationViewController as! ModalViewController
vc.modalPresentationStyle = UIModalPresentationStyle.OverCurrentContext //All objects and view are transparent
}
StoryBoard上的模态视图控制器:
在模态视图控制器上
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.blackColor().colorWithAlphaComponent(0.8) //view only black coloured transparent
}
示例屏幕截图:
如有任何其他疑问,请在此处评论:)
如果您对透明视图控制器感到困惑或更多,那么在Youtube上为您提供watch my video tutorial:D
答案 5 :(得分:2)
<强> iOS8上+ 强>
下面的代码片段将解决iOS8 +中的这个问题
SecondViewController *secondViewController = [[SecondViewController alloc] init];
secondViewController.modalPresentationStyle = UIModalPresentationOverCurrentContext;
[self presentViewController:secondViewController animated:YES completion:nil];
答案 6 :(得分:0)
我有类似的问题,我想做一些类似于你在这里展示的第二个截图(巴西/葡萄牙报纸!)
我这样解决了。我插入了一个覆盖整个视图控制器的UIView,然后我转到了属性检查器,我将UIView的背景颜色设置为黑色,不透明度为50%。然后,我在第一个上面插入了另一个UIView,并且我在那个上面工作了
答案 7 :(得分:0)