/**
top +下 -上
left +右 -左
bottom +上 -下
right +左 -右
**/
同时存在图片和title的情况下,居中
[button setImageEdgeInsets:UIEdgeInsetsMake(0, 0, 0, -button.titleLabel.intrinsicContentSize.width)]
[button setTitleEdgeInsets:UIEdgeInsetsMake(0, -button.currentImage.size.width, 0, 0)]
#import <UIKit/UIKit.h>
@interface ButEdgeInset:NSObject
@property (assign, nonatomic)CGFloat top;
@property (assign, nonatomic)CGFloat left;
@property (assign, nonatomic)CGFloat bottom;
@property (assign, nonatomic)CGFloat right;
@property (assign, nonatomic)CGSize sizeButton;
@end
typedef void(^ButtonEdgeInset)(UIEdgeInsets edgeInset);
@interface UIButton (CNMButtonEdgeInsets)
-(void)cnm_set_Title_Image_EdgeInsetWithBlock:(void(^)(ButEdgeInset* edgeInsetTitle,ButEdgeInset* edgeInsetImage))block;
@end
//
// UIButton+CNMButtonEdgeInsets.m
// ButtonDemo
//
// Created by gaoshuang on 2DistanceMin17/12/4.
// Copyright © 2DistanceMin17年 gaoshuang . All rights reserved.
//
#import "UIButton+CNMButtonEdgeInsets.h"
@implementation ButEdgeInset
@end
#define DistanceMin 0.00001 //区分对齐的情况
@implementation UIButton (CNMButtonEdgeInsets)
-(void)cnm_setImageEdgeInsetWithBlock:(void(^)(ButEdgeInset* edgeInset))block withIsBoth:(BOOL)isBoth{
ButEdgeInset* inset =[[ButEdgeInset alloc]init]
inset.top = DistanceMin
inset.left = DistanceMin
inset.bottom = DistanceMin
inset.right = DistanceMin
block(inset)
if (inset.top != DistanceMin && inset.bottom != DistanceMin ) {
NSLog(@"_________Image约束失败____________")
}else if (inset.left != DistanceMin && inset.right != DistanceMin){
NSLog(@"_________Image约束失败____________")
}
if (inset.sizeButton.width == 0 && inset.sizeButton.height == 0 ) {
inset.sizeButton = self.frame.size
}
if (inset.top != DistanceMin && inset.left != DistanceMin) {
self.imageEdgeInsets = UIEdgeInsetsMake( -(inset.sizeButton.height/2-inset.top-self.currentImage.size.height/2),
-(inset.sizeButton.width/2-inset.left-self.currentImage.size.width/2),
(inset.sizeButton.height/2-inset.top-self.currentImage.size.height/2),
(inset.sizeButton.width/2-inset.left-self.currentImage.size.width/2)+(isBoth?-self.titleLabel.intrinsicContentSize.width:0)
)
}else if (inset.top != DistanceMin && inset.right != DistanceMin){
self.imageEdgeInsets = UIEdgeInsetsMake( -(inset.sizeButton.height/2-inset.top-self.currentImage.size.height/2),
(inset.sizeButton.width/2-inset.right-self.currentImage.size.width/2),
(inset.sizeButton.height/2-inset.top-self.currentImage.size.height/2),
-(inset.sizeButton.width/2-inset.right-self.currentImage.size.width/2)+(isBoth?-self.titleLabel.intrinsicContentSize.width:0)
)
}else if (inset.bottom != DistanceMin && inset.left != DistanceMin){
self.imageEdgeInsets = UIEdgeInsetsMake( (inset.sizeButton.height/2-inset.bottom-self.currentImage.size.height/2),
-(inset.sizeButton.width/2-inset.left-self.currentImage.size.width/2),
-(inset.sizeButton.height/2-inset.bottom-self.currentImage.size.height/2),
(inset.sizeButton.width/2-inset.left-self.currentImage.size.width/2)+(isBoth?-self.titleLabel.intrinsicContentSize.width:0)
)
}else if (inset.bottom != DistanceMin && inset.right != DistanceMin){
self.imageEdgeInsets = UIEdgeInsetsMake( (inset.sizeButton.height/2-inset.bottom-self.currentImage.size.height/2),
(inset.sizeButton.width/2-inset.right-self.currentImage.size.width/2),
-(inset.sizeButton.height/2-inset.bottom-self.currentImage.size.height/2),
-(inset.sizeButton.width/2-inset.right-self.currentImage.size.width/2)+(isBoth?-self.titleLabel.intrinsicContentSize.width:0)
)
}else if(inset.top != DistanceMin){
self.imageEdgeInsets = UIEdgeInsetsMake( -(inset.sizeButton.height/2-inset.top-self.currentImage.size.height/2),
0,
(inset.sizeButton.height/2-inset.top-self.currentImage.size.height/2),
0+(isBoth?-self.titleLabel.intrinsicContentSize.width:0)
)
}else if (inset.left != DistanceMin){
self.imageEdgeInsets = UIEdgeInsetsMake( 0,
-(inset.sizeButton.width/2-inset.left-self.currentImage.size.width/2),
0,
(inset.sizeButton.width/2-inset.left-self.currentImage.size.width/2)+(isBoth?-self.titleLabel.intrinsicContentSize.width:0)
)
}else if (inset.bottom != DistanceMin){
self.imageEdgeInsets = UIEdgeInsetsMake( (inset.sizeButton.height/2-inset.bottom-self.currentImage.size.height/2),
0,
-(inset.sizeButton.height/2-inset.bottom-self.currentImage.size.height/2),
0+(isBoth?-self.titleLabel.intrinsicContentSize.width:0)
)
}else if (inset.right != DistanceMin){
self.imageEdgeInsets = UIEdgeInsetsMake( 0,
(inset.sizeButton.width/2-inset.right-self.currentImage.size.width/2),
0,
-(inset.sizeButton.width/2-inset.right-self.currentImage.size.width/2)+(isBoth?-self.titleLabel.intrinsicContentSize.width:0)
)
}else{
NSLog(@"_________Image无效约束____________")
}
}
-(void)cnm_setTitleEdgeInsetWithBlock:(void(^)(ButEdgeInset* edgeInset))block withIsBoth:(BOOL)isBoth{
ButEdgeInset* inset =[[ButEdgeInset alloc]init]
inset.top = DistanceMin
inset.left = DistanceMin
inset.bottom = DistanceMin
inset.right = DistanceMin
block(inset)
if (inset.top != DistanceMin && inset.bottom != DistanceMin ) {
NSLog(@"_________Title约束失败____________")
}else if (inset.left != DistanceMin && inset.right != DistanceMin){
NSLog(@"_________Title约束失败____________ ")
}
if (inset.sizeButton.width == 0 && inset.sizeButton.height == 0 ) {
inset.sizeButton = self.frame.size
}
if (inset.top != DistanceMin && inset.left != DistanceMin) {
self.titleEdgeInsets = UIEdgeInsetsMake( -(inset.sizeButton.height/2-inset.top-self.titleLabel.intrinsicContentSize.height/2),
-(inset.sizeButton.width/2-inset.left-self.titleLabel.intrinsicContentSize.width/2)+(isBoth?-self.currentImage.size.width:0),
(inset.sizeButton.height/2-inset.top-self.titleLabel.intrinsicContentSize.height/2),
(inset.sizeButton.width/2-inset.left-self.titleLabel.intrinsicContentSize.width/2)
)
}else if (inset.top != DistanceMin && inset.right != DistanceMin){
self.titleEdgeInsets = UIEdgeInsetsMake( -(inset.sizeButton.height/2-inset.top-self.titleLabel.intrinsicContentSize.height/2),
(inset.sizeButton.width/2-inset.right-self.titleLabel.intrinsicContentSize.width/2)+(isBoth?-self.currentImage.size.width:0),
(inset.sizeButton.height/2-inset.top-self.titleLabel.intrinsicContentSize.height/2),
-(inset.sizeButton.width/2-inset.right-self.titleLabel.intrinsicContentSize.width/2)
)
}else if (inset.bottom != DistanceMin && inset.left != DistanceMin){
self.titleEdgeInsets = UIEdgeInsetsMake( (inset.sizeButton.height/2-inset.bottom-self.titleLabel.intrinsicContentSize.height/2),
-(inset.sizeButton.width/2-inset.left-self.titleLabel.intrinsicContentSize.width/2)+(isBoth?-self.currentImage.size.width:0),
-(inset.sizeButton.height/2-inset.bottom-self.titleLabel.intrinsicContentSize.height/2),
(inset.sizeButton.width/2-inset.left-self.titleLabel.intrinsicContentSize.width/2)
)
}else if (inset.bottom != DistanceMin && inset.right != DistanceMin){
self.titleEdgeInsets = UIEdgeInsetsMake( (inset.sizeButton.height/2-inset.bottom-self.titleLabel.intrinsicContentSize.height/2),
(inset.sizeButton.width/2-inset.right-self.titleLabel.intrinsicContentSize.width/2)+(isBoth?-self.currentImage.size.width:0),
-(inset.sizeButton.height/2-inset.bottom-self.titleLabel.intrinsicContentSize.height/2),
-(inset.sizeButton.width/2-inset.right-self.titleLabel.intrinsicContentSize.width/2)
)
}else if(inset.top != DistanceMin){
self.titleEdgeInsets = UIEdgeInsetsMake( -(inset.sizeButton.height/2-inset.top-self.titleLabel.intrinsicContentSize.height/2),
+(isBoth?-self.currentImage.size.width:0),
(inset.sizeButton.height/2-inset.top-self.titleLabel.intrinsicContentSize.height/2),
0
)
}else if (inset.left != DistanceMin){
self.titleEdgeInsets = UIEdgeInsetsMake( 0,
-(inset.sizeButton.width/2-inset.left-self.titleLabel.intrinsicContentSize.width/2)+(isBoth?-self.currentImage.size.width:0),
0,
(inset.sizeButton.width/2-inset.left-self.titleLabel.intrinsicContentSize.width/2)
)
}else if (inset.bottom != DistanceMin){
self.titleEdgeInsets = UIEdgeInsetsMake( (inset.sizeButton.height/2-inset.bottom-self.titleLabel.intrinsicContentSize.height/2),
+(isBoth?-self.currentImage.size.width:0),
-(inset.sizeButton.height/2-inset.bottom-self.titleLabel.intrinsicContentSize.height/2),
0
)
}else if (inset.right != DistanceMin){
self.titleEdgeInsets = UIEdgeInsetsMake( 0,
(inset.sizeButton.width/2-inset.right-self.titleLabel.intrinsicContentSize.width/2)+(isBoth?-self.currentImage.size.width:0),
0,
-(inset.sizeButton.width/2-inset.right-self.titleLabel.intrinsicContentSize.width/2)
)
}else{
NSLog(@"_________Title无效约束____________")
}
}
-(void)cnm_set_Title_Image_EdgeInsetWithBlock:(void(^)(ButEdgeInset* edgeInsetTitle,ButEdgeInset* edgeInsetImage))block{
//没有设置title的时候 self.titleLabel.intrinsicContentSize.height ==0 self.titleLabel.intrinsicContentSize.wide == 22
ButEdgeInset* insetTitle =[[ButEdgeInset alloc]init]
insetTitle.top = DistanceMin
insetTitle.left = DistanceMin
insetTitle.bottom = DistanceMin
insetTitle.right = DistanceMin
ButEdgeInset* insetImage =[[ButEdgeInset alloc]init]
insetImage.top = DistanceMin
insetImage.left = DistanceMin
insetImage.bottom = DistanceMin
insetImage.right = DistanceMin
block(insetTitle,insetImage)
if ((insetTitle.top != DistanceMin || insetTitle.left != DistanceMin ||insetTitle.bottom != DistanceMin || insetTitle.right != DistanceMin) && self.currentImage.size.height != 0&&self.currentImage.size.width !=
0 && (insetImage.top != DistanceMin || insetImage.left != DistanceMin ||insetImage.bottom != DistanceMin || insetImage.right != DistanceMin) && self.titleLabel.intrinsicContentSize.height != 0 && self.titleLabel.intrinsicContentSize.width != 0) {
[self cnm_setTitleEdgeInsetWithBlock:^(ButEdgeInset *edgeInset) {
edgeInset.top =insetTitle.top
edgeInset.left =insetTitle.left
edgeInset.bottom =insetTitle.bottom
edgeInset.right =insetTitle.right
} withIsBoth:YES]
[self cnm_setImageEdgeInsetWithBlock:^(ButEdgeInset *edgeInset) {
edgeInset.top =insetImage.top
edgeInset.left =insetImage.left
edgeInset.bottom =insetImage.bottom
edgeInset.right =insetImage.right
} withIsBoth:YES]
}
else if ((insetTitle.top != DistanceMin || insetTitle.left != DistanceMin ||insetTitle.bottom != DistanceMin || insetTitle.right != DistanceMin) && (insetImage.top != DistanceMin || insetImage.left != DistanceMin ||insetImage.bottom != DistanceMin || insetImage.right != DistanceMin) ){
if (self.titleLabel.intrinsicContentSize.height == 0 || self.titleLabel.intrinsicContentSize.width == 0 || self.currentImage.size.height == 0||self.currentImage.size.width ==0) {
NSLog(@"_________约束失败:约束值有效,约束对象title或者image不存在____________")
}
}
else if((insetTitle.top != DistanceMin || insetTitle.left != DistanceMin ||insetTitle.bottom != DistanceMin || insetTitle.right != DistanceMin)&& self.titleLabel.intrinsicContentSize.height != 0 && self.titleLabel.intrinsicContentSize.width != 0 && self.currentImage.size.height==0&&self.currentImage.size.width==0){
[self cnm_setTitleEdgeInsetWithBlock:^(ButEdgeInset *edgeInset) {
edgeInset.top =insetTitle.top
edgeInset.left =insetTitle.left
edgeInset.bottom =insetTitle.bottom
edgeInset.right =insetTitle.right
} withIsBoth:NO]
}else if((insetImage.top != DistanceMin || insetImage.left != DistanceMin ||insetImage.bottom != DistanceMin || insetImage.right != DistanceMin) && self.currentImage.size.height != 0 && self.currentImage.size.width != 0 && self.titleLabel.intrinsicContentSize.width==0){
[self cnm_setImageEdgeInsetWithBlock:^(ButEdgeInset *edgeInset) {
edgeInset.top =insetImage.top
edgeInset.left =insetImage.left
edgeInset.bottom =insetImage.bottom
edgeInset.right =insetImage.right
} withIsBoth:NO]
}else{
NSLog(@"_________约束失败:约束对象不存在或者约束值无效____________")
}
}
@end