How to add only a TOP border on a UIButton?

后端 未结 11 1714
自闭症患者
自闭症患者 2020-12-13 03:45

I know how to add border to a button in iOS 7, with the following code :

[[myButton layer] setBorderColor:[[[UIColor grayColor] colorWithAlphaComponent:0.5]          


        
11条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-12-13 04:26

    If you use constraints then you can add a border view with the required constraints

    // MARK: - Add a border to one side of a view
    
    public enum BorderSide {
        case top, bottom, left, right
    }
    
    extension UIView {
        public func addBorder(side: BorderSide, color: UIColor, width: CGFloat) {
            let border = UIView()
            border.translatesAutoresizingMaskIntoConstraints = false
            border.backgroundColor = color
            self.addSubview(border)
    
            let topConstraint = topAnchor.constraint(equalTo: border.topAnchor)
            let rightConstraint = trailingAnchor.constraint(equalTo: border.trailingAnchor)
            let bottomConstraint = bottomAnchor.constraint(equalTo: border.bottomAnchor)
            let leftConstraint = leadingAnchor.constraint(equalTo: border.leadingAnchor)
            let heightConstraint = border.heightAnchor.constraint(equalToConstant: width)
            let widthConstraint = border.widthAnchor.constraint(equalToConstant: width)
    
    
            switch side {
            case .top:
                NSLayoutConstraint.activate([leftConstraint, topConstraint, rightConstraint, heightConstraint])
            case .right:
                NSLayoutConstraint.activate([topConstraint, rightConstraint, bottomConstraint, widthConstraint])
            case .bottom:
                NSLayoutConstraint.activate([rightConstraint, bottomConstraint, leftConstraint, heightConstraint])
            case .left:
                NSLayoutConstraint.activate([bottomConstraint, leftConstraint, topConstraint, widthConstraint])
            }
        }
    }
    

    Then set it something like the below

    myButton.addBorder(side: .left, color: UIColor.lightGray, width: 1)
    

    (inspired by this answer)

提交回复
热议问题