// // IHButtonExtension.swift // Inhealth // // Created by weclouds on 2020/4/17. // Copyright © 2020 weclouds. All rights reserved. // import UIKit enum ButtonEdgeInsetsStyle { // 图片相对于label的位置 case Top case Left case Right case Bottom } extension UIButton { func layoutButton(style: ButtonEdgeInsetsStyle, imageTitleSpace: CGFloat) { //得到imageView和titleLabel的宽高 let imageWidth = self.imageView?.frame.size.width let imageHeight = self.imageView?.frame.size.height var labelWidth: CGFloat! = 0.0 var labelHeight: CGFloat! = 0.0 labelWidth = self.titleLabel?.intrinsicContentSize.width labelHeight = self.titleLabel?.intrinsicContentSize.height //初始化imageEdgeInsets和labelEdgeInsets var imageEdgeInsets = UIEdgeInsets.zero var labelEdgeInsets = UIEdgeInsets.zero //根据style和space得到imageEdgeInsets和labelEdgeInsets的值 switch style { /** * titleEdgeInsets是titleLabel相对于其上下左右的inset,跟tableView的contentInset是类似的; * 如果只有title,那titleLabel的 上下左右 都是 相对于Button 的; * 如果只有image,那imageView的 上下左右 都是 相对于Button 的; * 如果同时有image和label,那image的 上下左 是 相对于Button 的,右 是 相对于label 的; * label的 上下右 是 相对于Button的, 左 是 相对于label 的。 */ case .Top: //上 左 下 右 imageEdgeInsets = UIEdgeInsets(top: -labelHeight-imageTitleSpace/2, left: 0, bottom: 0, right: -labelWidth) labelEdgeInsets = UIEdgeInsets(top: 0, left: -imageWidth!, bottom: -imageHeight!-imageTitleSpace/2, right: 0) break; case .Left: imageEdgeInsets = UIEdgeInsets(top: 0, left: -imageTitleSpace/2, bottom: 0, right: imageTitleSpace) labelEdgeInsets = UIEdgeInsets(top: 0, left: imageTitleSpace/2, bottom: 0, right: -imageTitleSpace/2) break; case .Bottom: imageEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: -labelHeight!-imageTitleSpace/2, right: -labelWidth) labelEdgeInsets = UIEdgeInsets(top: -imageHeight!-imageTitleSpace/2, left: -imageWidth!, bottom: 0, right: 0) break; case .Right: imageEdgeInsets = UIEdgeInsets(top: 0, left: labelWidth+imageTitleSpace/2, bottom: 0, right: -labelWidth-imageTitleSpace/2) labelEdgeInsets = UIEdgeInsets(top: 0, left: -imageWidth!-imageTitleSpace/2, bottom: 0, right: imageWidth!+imageTitleSpace/2) break; } self.titleEdgeInsets = labelEdgeInsets self.imageEdgeInsets = imageEdgeInsets } }