如何在iOS中使子视图成为圆角作为超级视图?

Posted

技术标签:

【中文标题】如何在iOS中使子视图成为圆角作为超级视图?【英文标题】:How to make sub view to be round corner as super view in iOS? 【发布时间】:2018-12-18 02:41:08 【问题描述】:

我已使用以下方法将视图(浅灰色)设置为圆角:

layer.masksToBounds = false
layer.cornerRadius = 10

它工作正常。但是当添加子视图(深灰色)时,该子视图不像其超级视图那样是圆形的。 如何使子视图成为圆角作为超级视图?

【问题讨论】:

【参考方案1】:

请在添加子视图时将masksToBounds 设置为true

subView.masksToBounds = true

【讨论】:

尝试添加clipToBounds = true【参考方案2】:

尝试将cornerRadius 也添加到子视图中。

subview.layer.masksToBounds = false
subview.layer.cornerRadius = 10

更新

通过使用UIBezierPath,我们可以为任何我们想要的角添加圆度。

subview.roundCorners([.topLeft, .topRight, .bottomRight], radius: 6)

扩展

extension UIView 
    func roundCorners(_ corners: UIRectCorner, radius: CGFloat) 
        let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
        let mask = CAShapeLayer()
        mask.path = path.cgPath
        self.layer.mask = mask
    

【讨论】:

如果这样,子视图将环绕所有四个角。我想要的只是子视图的右上角和左上角。 请检查更新以增加子视图顶角的圆度 那很好。这是解决方案之一。让我们看看有没有办法让子视图角落依赖于超级视图。

以上是关于如何在iOS中使子视图成为圆角作为超级视图?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift iOS 中使 web 视图不可点击

如何在 iOS 应用中使滚动视图高度动态化?

如何在 SwiftUI 中使整个列表行成为 NavigationLink

iOS如何使透明视图的子视图不透明?

如何在iOS上仅在具有清晰颜色的模糊视图底部获得圆角?

iOS:如何将触摸事件从子视图转发到超级视图? [复制]