自定义button中有两个方法:
- (CGRect)titleRectForContentRect:(CGRect)contentRect{
//控制button中label的frame
}
- (CGRect)imageRectForContentRect:(CGRect)contentRect{
//控制button中imageView的fram
}
contentRect为按钮自己的边框
例:
左为系统button的效果 右为自定义的button实现效果
实现方式为:
#import "CaiZhongButton.h"
@interface CaiZhongButton()
@property(nonatomic,strong)NSFont *titleFont;
@end
@implementation CaiZhongButton
-(void)awakeFromNib{
self.titleFont=[UIFont systemFontOfSize:16];
self.titleLabel.font=self.titleFont;
//设置图片居中
self.imageView.contentMode=UIViewContentModeCenter;
}
-(CGRect)titleRectForContentRect:(CGRect)contentRect{
CGFloat titleX=0;
CGFloat titleY=0;
//获取button的title文字尺寸
NSDictionary *attrs=@{NSFontAttributeName:self.titleFont};
CGFloat titleW;
if (ios7) {
titleW=[self.currentTitle boundingRectWithSize:CGSizeMake(MAXFLOAT, MAXFLOAT)options:NSStringDrawingUsesLineFragmentOrigin attributes:attrs context:nil].size.width;
}else{
titleW=[self.currentTitle sizeWithFont:self.titleFont].width;
}
CGFloat titleH=contentRect.size.height;
return CGRectMake(titleX, titleY, titleW, titleH);
}
-(CGRect)imageRectForContentRect:(CGRect)contentRect{
CGFloat imageW=30;
CGFloat imageX=contentRect.size.width-imageW;
CGFloat imageY=0;
CGFloat imageH=contentRect.size.height;
return CGRectMake(imageX, imageY, imageW, imageH);
}
@end