本质上,这里我希望模式表单是透明的,这样我就可以看到它后面的UIView (它是全屏的)。
这个是可能的吗?将UIView设置为不透明,并且[UIColor clearColor]的backgroundColor不起作用。
我注意到当我从UIModalPresentationFormSheet切换到另一种表示风格时,我的视图的背景确实是透明的。
我哪里错了?
发布于 2012-01-24 01:53:07
据我所知,这已经不可能了。它曾经是,但苹果已经禁用了这一功能。
我所做的就是像普通一样创建我的UIView,并将它们作为子视图添加到我的主视图中。我不得不放弃我的表格,然后再做这个演示。
发布于 2014-01-08 01:58:41
这对我很有效:
[modalView.superview setBackgroundcolor:[UIColor clearColor]];它仍然会透明地使背景视图变暗,但不会用纯灰色覆盖它。
...............................................
iOS 8更新
我之前的解决方案不再适用于iOS 8。要让这样的东西在iOS 8上运行,需要很多步骤。所以我创建了一个很好的可重用的解决方案: ModalController https://github.com/koreyhinton/ModalController。
它真的很容易使用,并且可以自动关闭。
let modal = ModalController()
modal.content = myCustomView
presentViewController(modal, animated: true, completion: nil)如果你对实现细节感兴趣,我是这样做的:
让你的模式视图控制器占据整个屏幕,主视图的背景将在清晰和半暗之间切换。然后你将有一个内容视图,它将是一个模式,它将以纯色背景居中。我还使用了表示风格:.OverCurrentContext,它是我在init方法中指定的。
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
}https://stackoverflow.com/questions/8828340
复制相似问题