项目中常遇见图片和文字都有的格式,这里可以创建一个UIButton的类别,
#import <UIKit/UIKit.h>
typedef NS_ENUM(NSInteger, ZJButtonImageStyle){
ZJButtonImageStyleTop = 0, //图片在上,文字在下
ZJButtonImageStyleLeft, //图片在左,文字在右
ZJButtonImageStyleBottom, //图片在下,文字在上
ZJButtonImageStyleRight //图片在右,文字在左
};
@interface UIButton (Extension)
/**
设置button的imageView和titleLabel的布局样式及它们的间距
@param style imageView和titleLabel的布局样式
@param space imageView和titleLabel的间距
*/
- (void)layoutButtonWithImageStyle:(ZJButtonImageStyle)style
imageTitleToSpace:(CGFloat)space;
@end
#import "UIButton+Extension.h"
@implementation UIButton (Extension)
- (void)layoutButtonWithImageStyle:(ZJButtonImageStyle)style imageTitleToSpace:(CGFloat)space
{
//1、获取imageView和titleLabel的高和宽
CGFloat imageWidth = self.imageView.frame.size.width;
CGFloat imageHeight = self.imageView.frame.size.height;
CGFloat titleWidth = self.titleLabel.frame.size.width;
CGFloat titleHeight = self.titleLabel.frame.size.height;
//2、初始化一个内偏移
UIEdgeInsets imageEdgeInsets = UIEdgeInsetsZero;
UIEdgeInsets titleEdgeInsets = UIEdgeInsetsZero;
//3、不同的样式处理不同的内偏移
switch (style) {
case ZJButtonImageStyleTop:
imageEdgeInsets = UIEdgeInsetsMake(0, 0, titleHeight + space / 2, -titleWidth);
titleEdgeInsets = UIEdgeInsetsMake(imageHeight + space / 2, -imageWidth, 0, 0);
break;
case ZJButtonImageStyleLeft:
imageEdgeInsets = UIEdgeInsetsMake(0, 0, 0, space / 2);
titleEdgeInsets = UIEdgeInsetsMake(0, space / 2, 0, 0);
break;
case ZJButtonImageStyleBottom:
imageEdgeInsets = UIEdgeInsetsMake(titleHeight + space / 2, 0, 0, -titleWidth);
titleEdgeInsets = UIEdgeInsetsMake(0, -imageWidth, imageHeight + space / 2, 0);
break;
case ZJButtonImageStyleRight:
imageEdgeInsets = UIEdgeInsetsMake(0, titleWidth + space / 2, 0, -titleWidth);
titleEdgeInsets = UIEdgeInsetsMake(0, -imageWidth - space / 2, 0, imageWidth);
break;
default:
break;
}
//4、赋值
self.imageEdgeInsets = imageEdgeInsets;
self.titleEdgeInsets = titleEdgeInsets;
}