Swift - 一句代码搞定button图片和文字布局
处理上下左右各种图片布局的button,一句代码解决。
关注下面的标签,发现更多相似文章
extension UIButton {
enumFZHImagePosition {
caseleft //image is left, label is right (图片在左,文字在右)
caseright //image is right, label is left (图片在右,文字在左)
casetop //image is top, label is bottom (图片在上,文字在下)
case bottom //image is bottom, label is top (图片在下,文字在上)
}
funcsetImagePosition(position:FZHImagePosition, spacing:CGFloat) {
self.setTitle(self.currentTitle, for: .normal)
self.setImage(self.currentImage, for: .normal)
// MARK - ImageSize
varimageW:CGFloat=0
ifletwidth =imageView?.image?.size.width{
imageW = width
}else{
assertionFailure("image can't be nil(图片不能为空)")
}
varimageH:CGFloat=0
ifletheight =imageView?.image?.size.height{
imageH = height
}
// MARK - LabelSize
assert(titleLabel != nil, "label be nil(文字不能为空)")
varlabelW:CGFloat=0
if let width = titleLabel?.frame.size.width {
labelW = width
}
varlabelH:CGFloat=0
if let height = titleLabel?.frame.size.height {
labelH = height
}
letimageOffsetX = (imageW + labelW)/2- imageW/2
letimageOffsetY = imageH/2+ spacing/2
letlabelOffsetX = (imageW + labelW/2) - (imageW + labelW)/2
letlabelOffsetY = labelH/2+ spacing/2
lettempW =max(labelW, imageW)
letchangedW = labelW + imageW - tempW
lettempH =max(labelH, imageH)
letchangedH = labelH + imageH + spacing - tempH
switchposition {
case.left:
imageEdgeInsets=UIEdgeInsetsMake(0, -spacing/2,0, spacing/2)
titleEdgeInsets=UIEdgeInsetsMake(0, spacing/2,0, -spacing/2)
contentEdgeInsets=UIEdgeInsetsMake(0, spacing/2,0, spacing/2)
case.right:
imageEdgeInsets=UIEdgeInsetsMake(0, labelW + spacing/2,0, -(labelW + spacing/2))
titleEdgeInsets=UIEdgeInsetsMake(0, -(imageW + spacing/2),0, imageW + spacing/2)
contentEdgeInsets=UIEdgeInsetsMake(0, spacing/2,0, spacing/2)
case.top:
imageEdgeInsets=UIEdgeInsetsMake(-imageOffsetY, imageOffsetX, imageOffsetY, -imageOffsetX)
titleEdgeInsets=UIEdgeInsetsMake(labelOffsetY, -labelOffsetX, -labelOffsetY, labelOffsetX)
contentEdgeInsets=UIEdgeInsetsMake(imageOffsetY, -changedW/2, changedH-imageOffsetY, -changedW/2)
case.bottom:
imageEdgeInsets=UIEdgeInsetsMake(imageOffsetY, imageOffsetX, -imageOffsetY, -imageOffsetX)
titleEdgeInsets=UIEdgeInsetsMake(-labelOffsetY, -labelOffsetX, labelOffsetY, labelOffsetX)
contentEdgeInsets=UIEdgeInsetsMake(changedH-imageOffsetY, -changedW/2, imageOffsetY, -changedW/2)
}
}
}