基本上我在这里希望模态表单是透明的,所以我可以看到它背后的UIView(它是全屏)。
这可能吗?将UIView
设置为不透明,将backgroundColor
设置为[UIColor clearColor]
不起作用。
我注意到当我从UIModalPresentationFormSheet
切换到另一种演示样式时,我的视图的背景确实是透明的。
我哪里出错?
答案 0 :(得分:4)
这对我有用:
[modalView.superview setBackgroundcolor:[UIColor clearColor]];
它仍会透明地调暗背景视图,但不会用纯灰色覆盖它。
...............................................
我之前的解决方案不再适用于iOS 8。 有很多步骤可以让这样的东西适用于iOS 8.所以我创建了一个很好的可重用解决方案:ModalController https://github.com/koreyhinton/ModalController
它真的很容易使用并自动解散。
let modal = ModalController()
modal.content = myCustomView
presentViewController(modal, animated: true, completion: nil)
如果您对实施细节感兴趣,我就是这样做的:
让你的模态视图控制器占据整个屏幕,主视图的背景将在清晰和半暗之间切换。然后,您将拥有一个内容视图,该视图将以实心背景颜色为中心。我还使用了我在init方法中指定的演示风格:.OverCurrentContext
。
var content = UIView()
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.clearColor()
content.frame = CGRect(x:0, y:0, width:300, height:300)
content.backgroundColor = UIColor.blackColor()
view.addSubview(content)
}
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
view.backgroundColor = UIColor.blackColor().colorWithAlphaComponent(0.7)
}
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
view.backgroundColor = UIColor.clearColor()
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
content!.center = view.center
}
答案 1 :(得分:2)
据我所知,这已经不可能了。它曾经是,但Apple已禁用此功能。
我所做的只是简单地创建我的UIView
,并将它们作为子视图添加到我的主视图中。我必须解雇我的表单,然后进行此演示。