swift BUtton调整左右subView的间距

extension UIButton {
    
    func setSubViewPosition(image anImage: UIImage? = nil,
                   title: String? = nil,
                   titlePosition: UIViewContentMode,
                   additionalSpacing: CGFloat,
                   state: UIControlState){
        
        self.imageView?.contentMode = .center
        self.setImage(anImage, for: state)
        
        let title = title ?? (self.titleLabel?.text ?? "")
        positionLabelRespectToImage(title: title,
                                    position: titlePosition,
                                    spacing: additionalSpacing)
        
        self.titleLabel?.contentMode = .center
        self.setTitle(title, for: state)
    }
    
    private func positionLabelRespectToImage(title: String,
                                             position: UIViewContentMode,
                                             spacing: CGFloat) {
        let imageSize = self.imageRect(forContentRect: self.frame)
        let titleFont = self.titleLabel?.font!
        let titleSize = title.size(withAttributes: [NSAttributedStringKey.font: titleFont!])
        
        var titleInsets: UIEdgeInsets
        var imageInsets: UIEdgeInsets
        
        switch (position){
        case .top:
            let top = -imageSize.height
                    - titleSize.height
                    - spacing
            let left = -imageSize.width
            titleInsets = UIEdgeInsets(top: top,
                                       left: left,
                                       bottom: 0,
                                       right: 0)
            imageInsets = UIEdgeInsets(top: 0,
                                       left: 0,
                                       bottom: 0,
                                       right: -titleSize.width)
        case .bottom:
            let top = imageSize.height
                    + titleSize.height
                    + spacing
            let left = -imageSize.width
            titleInsets = UIEdgeInsets(top: top,
                                       left: left,
                                       bottom: 0,
                                       right: 0)
            let right = -titleSize.width
            imageInsets = UIEdgeInsets(top: 0,
                                       left: 0,
                                       bottom: 0, right: right)
        case .left:
            let left = -(imageSize.width * 2)
            titleInsets = UIEdgeInsets(top: 0,
                                       left:left,
                                       bottom: 0,
                                       right: 0)
            let right = -(titleSize.width * 2 + spacing)
            imageInsets = UIEdgeInsets(top: 0,
                                       left: 0,
                                       bottom: 0,
                                       right: right)
        case .right:
            titleInsets = UIEdgeInsets(top: 0,
                                       left: 0,
                                       bottom: 0,
                                       right: -spacing)
            imageInsets = UIEdgeInsets(top: 0,
                                       left: 0,
                                       bottom: 0,
                                       right: 0)
        default:
            titleInsets = UIEdgeInsets(top: 0,
                                       left: 0,
                                       bottom: 0,
                                       right: 0)
            imageInsets = UIEdgeInsets(top: 0,
                                       left: 0,
                                       bottom: 0,
                                       right: 0)
        }
        
        self.titleEdgeInsets = titleInsets
        self.imageEdgeInsets = imageInsets
    }
}

你可能感兴趣的:(swift BUtton调整左右subView的间距)