【问题标题】:Borders are cropped with rounded corners? Swift边框用圆角裁剪?迅速
【发布时间】:2019-12-03 21:41:06
【问题描述】:

我已经看到了一些关于这个主题的问题,但它们只是回答了其中一个问题。我正在从一侧转角:

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.masksToBounds = true
    self.layer.mask = mask
}

和实施:

detailsView.roundCorners(.allCorners, radius: 20)

然后,我尝试通过以下方式添加边框:

func addBorder(edge: UIRectEdge, color: UIColor, thickness: CGFloat) {

    let border = CALayer()

    switch edge {
        case UIRectEdge.top:
            border.frame = CGRect(x: 0, y: 0, width: frame.width, height: thickness)

        case UIRectEdge.bottom:
            border.frame = CGRect(x:0, y: frame.height - thickness, width: frame.width, height:thickness)

        case UIRectEdge.left:
            border.frame = CGRect(x:0, y:0, width: thickness, height: frame.height)

        case UIRectEdge.right:
            border.frame = CGRect(x: frame.width - thickness, y: 0, width: thickness, height: frame.height)

        default: do {}
    }

    border.backgroundColor = color.cgColor
    addSublayer(border)
}

和实施:

detailsView.layer.addBorder(edge: .top, color: .lightLavender, thickness: 1)

我做错了什么?我得到了这个结果——边框被裁剪:

【问题讨论】:

    标签: ios swift border rounded-corners


    【解决方案1】:

    self.layer.masksToBounds = true 裁剪边框。

    您必须在另一个内部使用两个视图来解决这个问题。还要为两个视图设置相同的框架。

    在子视图中使用

    childView.roundCorners(.allCorners, radius: 20)
    

    在父视图中使用

    parentView.layer.addBorder(edge: .top, color: .lightLavender, thickness: 1)
    

    【讨论】:

      【解决方案2】:

      我已经通过以下方式圆角:

      func roundCorners(radius: CGFloat, mask: CACornerMask) {
          cornerRadius = radius
          maskedCorners = mask
      

      实施:

          detailsView.layer.roundCorners(radius: 20, mask: [.layerMinXMinYCorner, .layerMaxXMinYCorner])
      

      边界:

      extension UIView {
      @IBInspectable var borderWidthV: CGFloat {
          get {
              return layer.borderWidth
          }
          set {
              layer.borderWidth = newValue
          }
      }
      
      @IBInspectable var borderColorV: UIColor? {
          get {
              return UIColor(cgColor: layer.borderColor!)
          }
          set {
              layer.borderColor = newValue?.cgColor
          }
        }
      }
      

      然后,我刚刚在视图底部添加了白色 UIView 以隐藏底部边框。

      【讨论】:

        猜你喜欢
        • 2013-05-21
        • 1970-01-01
        • 1970-01-01
        • 2018-11-28
        • 1970-01-01
        • 1970-01-01
        • 2012-02-10
        • 1970-01-01
        • 2011-07-22
        相关资源
        最近更新 更多