喜大普奔:
MZLibrary已上传到CocoaPods,该实用类包括封装的网络请求、UIButton的imageView位置、UIView的分类、Unicode转汉字等都已集成,欢迎使用。导入方法为pod 'MZLibrary可以写一个分类,以实现button的ImageView相对button的上、左、下、右的位置。
持续更新:逐步完善UIButton的所有分类,包括扩大点击热区等。

UIButton+Extension.h
#import <UIKit/UIKit.h>
typedef NS_ENUM(NSUInteger, MZImageStyle) {
MZImageStyleTop, //image在上,title在下
MZImageStyleLeft, //image在左,title在右
MZImageStyleRight, //image在右,title在左
MZImageStyleBottom //image在下,title在上
};
@interface UIButton (Extension)
- (void)layoutButtonImageStyle:(MZImageStyle)style imageTitleSpace:(CGFloat)space;
@end
UIButton+Extension.m
#import "UIButton+Extension.h"
@implementation UIButton (Extension)
- (void)layoutButtonImageStyle:(MZImageStyle)style imageTitleSpace:(CGFloat)space {
// 1、获取button的Image宽高
CGFloat imageWidth = self.imageView.frame.size.width;
CGFloat imageHeight = self.imageView.frame.size.height;
CGFloat labelWidth = 0.0;
CGFloat labelHeight = 0.0;
if (@available(iOS 8.0, *)) {
// 由于iOS8中titleLabel的size为0,用下面的这种设置
labelWidth = self.titleLabel.intrinsicContentSize.width;
labelHeight = self.titleLabel.intrinsicContentSize.height;
} else {
labelWidth = self.titleLabel.frame.size.width;
labelHeight = self.titleLabel.frame.size.height;
}
// 2、imageEdges和titleEdges
UIEdgeInsets imageEdgeInsets = UIEdgeInsetsZero;
UIEdgeInsets labelEdgeInsets = UIEdgeInsetsZero;
// 3、根据style和space获取imageEdges和titleEdges
/*
MZImageStyleTop, //image在上,title在下
MZImageStyleLeft, //image在左,title在右
MZImageStyleRight, //image在右,title在左
MZImageStyleBottom //image在下,title在上
*/
switch (style) {
case MZImageStyleTop: {
imageEdgeInsets = UIEdgeInsetsMake(-labelHeight - space/2.0, 0, 0, -labelWidth);
labelEdgeInsets = UIEdgeInsetsMake(0, -imageWidth, -imageHeight - space/2.0, 0);
}
break;
case MZImageStyleLeft: {
imageEdgeInsets = UIEdgeInsetsMake(0, -space/2.0, 0, space/2.0);
labelEdgeInsets = UIEdgeInsetsMake(0, space/2.0, 0, -space/2.0);
}
break;
case MZImageStyleRight: {
imageEdgeInsets = UIEdgeInsetsMake(0, labelWidth + space/2.0, 0, -labelWidth - space/2.0);
labelEdgeInsets = UIEdgeInsetsMake(0, -imageWidth - space/2.0, 0, imageWidth + space/2.0);
}
break;
case MZImageStyleBottom: {
imageEdgeInsets = UIEdgeInsetsMake(0, 0, -labelHeight - space/2.0, -labelWidth);
labelEdgeInsets = UIEdgeInsetsMake(-imageHeight - space/2.0, -imageWidth, 0, 0);
}
break;
default:
break;
}
// 4. 赋值
self.titleEdgeInsets = labelEdgeInsets;
self.imageEdgeInsets = imageEdgeInsets;
}
@end
使用:
UIButton *buttonTop = [UIButton buttonWithType:UIButtonTypeCustom];
buttonTop.backgroundColor = [UIColor lightGrayColor];
[buttonTop setTitle:@"Image在上" forState:UIControlStateNormal];
[buttonTop setImage:[UIImage imageNamed:@"1"] forState:UIControlStateNormal];
buttonTop.frame = CGRectMake(100, 100, 200, 100);
[buttonTop layoutButtonImageStyle:MZImageStyleTop imageTitleSpace:10.f];
[self.view addSubview:buttonTop];
需要注意,不支持xib。
MZLibrary已上传至CocoaPods,提供网络请求封装、UIButton自定义布局等功能。通过按钮分类,实现图片与文字的上下左右排列,支持自定义间距。适用于iOS开发,需注意不支持xib。
1万+

被折叠的 条评论
为什么被折叠?



