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
    }
}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容