更改模态视图控制器的 cornerRadius

Change cornerRadius of the modal view controller

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

view.layer.cornerRadius = 25

我没有在 apple 文档中找到任何提及它的地方,有什么办法让它工作吗?这甚至可能吗?

你不能,那是 apple 创建的自定义演示控制器,它 protected/private API 符合整个 apple 生态系统的新设计标准 ios 13 和超过。你可以做的是创建你自己的 UIPresentationController 子类实现,然后将拐角圆化到你想要的任何拐角半径。然而,将 UIPresentationController 子类化为与滚动视图的一级嵌套良好交互的平移手势是一项艰巨的任务。在您尝试覆盖默认值之前,我会检查一些示例代码,因为这样做会让您很快陷入混乱的黑洞,除非您精通 UIKit、Foundation 和委托 ios .

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

我明白了,这对您来说可能为时已晚,但也许对其他人有用。我用了layer(gradient) with mask,不过我觉得,你可以随意修改

    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)