UIButton-UIEdgeInsets

/**
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)];
//
//  UIButton+CNMButtonEdgeInsets.h
//  ButtonDemo
//
//  Created by gaoshuang  on 2017/12/4.
//  Copyright © 2017年 gaoshuang . All rights reserved.
//

#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)
/*
* ButEdgeInset 距离边框的位置
* 每种约束至多设置两个,左上,左下,右上,右下
* 约束出现错误,检查是否重复约束或者约束对象错误
*/
-(void)cnm_set_Title_Image_EdgeInsetWithBlock:(void(^)(ButEdgeInset* edgeInsetTitle,ButEdgeInset* edgeInsetImage))block;

@end

/**使用
 [button cnm_set_Title_Image_EdgeInsetWithBlock:^(ButEdgeInset *edgeInsetTitle, ButEdgeInset *edgeInsetImage) {
 //只有tittle的情况
 //设置距离左边框
 edgeInsetTitle.left = 10;
 //设置左上
 edgeInsetTitle.left = 10;
 edgeInsetTitle.top = 10;

 只有Image的情况
 设置距离左边框
 edgeInsetImage.right = 10;
 设置左上
 edgeInsetImage.left = 10;
 edgeInsetImage.top  = 10;


 都存在的情况
 edgeInsetImage.left = 10;
 edgeInsetTitle.left = 10;

 设置图片左上,文字右下
 edgeInsetImage.left = 10;
 edgeInsetImage.top = 10;

 edgeInsetTitle.bottom = 10;
 edgeInsetTitle.right = 10;

 }];
 **/
//
//  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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值