Round Top Corners of a UIButton in Swift

前端 未结 10 1909
情深已故
情深已故 2020-11-27 16:33

I know I can round all four corners using:

 myBtn.layer.cornerRadius = 8
 myBtn.layer.masksToBounds = true

Since I only want to round two,

10条回答
  •  南方客
    南方客 (楼主)
    2020-11-27 17:05

    Swift 4: For latest iOS 11 onwards

    override func viewDidLoad() {
        super.viewDidLoad()
    
        if #available(iOS 11.0, *) {
            self.viewToRound.clipsToBounds = true
            viewToRound.layer.cornerRadius = 20
            viewToRound.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner]
        } else {
            // Fallback on earlier versions
        }
    }
    

    Earlier iOS (10,9 etc) Versions (works for iOS 11 too)

    override func viewDidLayoutSubviews() {
        self.viewToRound.clipsToBounds = true
        let path = UIBezierPath(roundedRect: viewToRound.bounds,
                                byRoundingCorners: [.topRight, .topLeft],
                                cornerRadii: CGSize(width: 20, height: 20))
    
        let maskLayer = CAShapeLayer()
    
        maskLayer.path = path.cgPath
        viewToRound.layer.mask = maskLayer
    }
    

提交回复
热议问题