相信大家都或多或少的遇到过这样的需求,网上有很多关于实现按钮上图下文字的介绍,使用UIEdgeInsetsMake()来改变按钮文字和图片的位置的方法居多。
下面我用一种简单粗暴的自定义按钮方法来实现该需求。
1、新建一个类,命名为“RYButton”,继承“UIButton”。
(1)“RYButton.h”的内容如下:
#import <UIKit/UIKit.h>
@interface RYButton : UIButton
@property (nonatomic,strong) UIImageView *topImageView;
@property (nonatomic,strong) UILabel *bottomLable;
@end
(2)“RYButton.m”的内容如下:
-(instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if(self) {
self.topImageView = [[UIImageView alloc] init];
self.topImageView.contentMode = UIViewContentModeScaleAspectFit;
[self addSubview:self.topImageView];
self.bottomLable = [[UILabel alloc] init];
self.bottomLable.textColor =[UIColor lightGrayColor];
self.bottomLable.textAlignment = NSTextAlignmentCenter; //文字居中
self.bottomLable.adjustsFontSizeToFitWidth = YES; //文字大小自适应
[self addSubview:self.bottomLable];
//给按钮添加边框并设置边框的颜色
[self.layer setBorderWidth:1];
CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();
CGColorRef color = CGColorCreate(colorSpaceRef, (CGFloat[]){0.9,0.9,0.9,1}); //RGB and alpha
[self.layer setBorderColor:color];
}
return self;
}
-(void)layoutSubviews {
[super layoutSubviews];
//在这里面可以设置按钮的图片和文字的尺寸
}
2、在需要此按钮的类添加头文件“RYButton.h”,并创建该按钮。
RYButton *button = [RYButton buttonWithType:UIButtonTypeCustom];
button.frame = 你要设计的按钮的尺寸;
[self.view addSubview:button];
在创建UILabel的时候,我建议一点。我一般会创建一个类,专门用来创建各种控件,然后在需要的时候调用即可。
比如我的代码实现
self.bottomLable = [RYKitTool createLabelTextColor:[UIColor lightGrayColor] textAlignment:NSTextAlignmentCenter];
[self addSubview:self.bottomLable];
该类方法的实现为:
+(UILabel *)createLabelTextColor:(UIColor *)textColor textAlignment:(NSTextAlignment)textAlignment {
UILabel *label = [[UILabel alloc] init];
label.textColor = textColor;
label.textAlignment = textAlignment;
label.adjustsFontSizeToFitWidth = YES;
return label;
}
这样可以大大减少创建控件的代码量,而且代码重用也比较方便。