更改模态视图控制器的cornerRadius

Posted

技术标签:

【中文标题】更改模态视图控制器的cornerRadius【英文标题】:Change cornerRadius of the modal view controller 【发布时间】:2019-10-23 16:38:00 【问题描述】:

我的目标是将模态呈现的控制器的角半径增加到 25。正如您在图片中看到的那样,默认情况下它具有圆角,但我需要它们具有更大的半径。我已经尝试通过访问控制器视图来圆角,但它不起作用。

view.layer.cornerRadius = 25

我在苹果文档中没有找到任何提及它的内容,有什么方法可以让它工作吗?这甚至可能吗?

【问题讨论】:

【参考方案1】:

您可以通过更改呈现的视图控制器的顶视图的背景来清除哪个隐藏了演示者圆角的视图来获得效果。然后将下一个顶视图的角圆角到所需的量。

【讨论】:

好主意@Maxwell【参考方案2】:

你不能,这是一个由苹果创建的自定义演示控制器,它是一个受保护的/私有 API,以符合整个苹果生态系统的新设计标准,适用于 ios 13 及更高版本。你可以做的是创建你自己的 UIPresentationController 子类实现,然后将角圆角到你想要的任何角半径。然而,使用平移手势子类化 UIPresentationController 甚至可以很好地与滚动视图的一级嵌套交互,这是一项艰巨的任务。在你尝试覆盖默认值之前,我会查看一些示例代码,因为这样做会让你很快陷入混乱的黑洞,除非你精通 UIKit、Foundation 和 ios 委托。

【讨论】:

感谢您的帮助!【参考方案3】:

我明白了,这对您来说可能为时已晚,但也许对其他人有用。我使用了带有蒙版的图层(渐变),但我认为,您可以随意修改它

    self.view.backgroundColor = .clear
    let mask = CAShapeLayer()

    mask.path = UIBezierPath(roundedRect: tableView.bounds, byRoundingCorners: [.topLeft, .topRight], cornerRadii: CGSize.init(width: 25, height: 25)).cgPath

    // You can use with layer of viewConroller's view
    self.view.layer.backgroundColor = UIColor.green.cgColor
    self.view.layer.mask = mask

    // And gradient background for VC
    let gradient = CAGradientLayer()
    gradient.colors = [UIColor.green.cgColor, UIColor.blue.cgColor]
    gradient.frame = view.bounds
    gradient.mask = mask
    self.view.layer.insertSublayer(gradient, at: 0)


    

【讨论】:

以上是关于更改模态视图控制器的cornerRadius的主要内容,如果未能解决你的问题,请参考以下文章

在模态视图控制器后面更改视图控制器

如何通知父视图控制器模态视图控制器中更改的屏幕方向?

ios 8 更改呈现/模态视图控制器的大小

当被模态视图控制器覆盖时,iOS 6 视图控制器布局在方向更改后不会更新

如何更改模态视图 iOS 6 上的状态栏

iiview 甲板控制器在呈现模态视图时更改框架而不更改界面方向