UIButton的ImageView相对UIButton的位置

MZLibrary已上传至CocoaPods,提供网络请求封装、UIButton自定义布局等功能。通过按钮分类,实现图片与文字的上下左右排列,支持自定义间距。适用于iOS开发,需注意不支持xib。

喜大普奔: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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值