未显示超级视图子视图 UIView 的角半径

Posted

技术标签:

【中文标题】未显示超级视图子视图 UIView 的角半径【英文标题】:Corner radius to superview subview UIView not shown 【发布时间】:2020-09-23 07:23:31 【问题描述】:

UIView of (50 height) 添加到superview,即UIView 50 % 保持在内部,剩余在superview 之外。

将圆角半径添加到superview后,bottomView的下半部分不显示。

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
    


override func awakeFromNib() 
    super.awakeFromNib()
    // Initialization code
    bg_view.roundCorners([.bottomLeft, .bottomRight], radius: 20). // MainView
    SearchView.bringSubviewToFront(bg_View)

这是故事板图片

【问题讨论】:

您能否添加不同颜色的故事板以避免任何潜在的混淆? @Rikh 也添加了故事板 下面的答案是解决您问题的最简单方法。 CAShapeLayer 添加到 bg_view 上,并导致剪切出现在 bg_view 内但在应用的 CGPath 之外的所有内容,这是 bg_view 的边界 【参考方案1】:

您应该将绿色视图移出背景视图,因为您正在设置cornerRadius。你的绿色视图可以有 centerY 约束等于你的 backgroundViews 底部。为了实现这一点,您可以首先定义它们之间的垂直间距,然后将该约束第一项编辑为 centerY

【讨论】:

以上是关于未显示超级视图子视图 UIView 的角半径的主要内容,如果未能解决你的问题,请参考以下文章

限制超级视图内的视图

如何为一些子成员设置卡片视图的角半径?

基于子视图约束的超级视图没有增加高度

UIView 即使在开始从超级视图中删除后也会重新出现

Autolayout - 使超级视图高度等于子视图高度+常量,其中子视图是 textView

问题:当子视图移出超级视图时,子视图位于超级视图之上