具有透明背景的UIModalPresentationFormSheet?

4

我希望模态表单表格是透明的,这样我就可以看到它后面的UIView(它是全屏的)。

这个可能吗?将UIView设置为不透明并使用[UIColor clearColor]backgroundColor并不起作用。

我注意到当我从UIModalPresentationFormSheet切换到另一种呈现样式时,我的视图背景确实是透明的。

我哪里出错了吗?

2个回答

4
这是我的解决方法:
[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,我在初始化方法中进行分配。
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
}

2
据我所知,这已经不再可行了。虽然以前可以,但是苹果已经禁用了此功能。
相反,我所做的就是像平常一样创建我的UIView,然后将它们作为子视图添加到我的主视图中。我必须先关闭我的表单视图,然后进行此演示。

1
@bneely 不好意思,我不确定这是什么时候引入的。 - Maurizio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接