美文网首页iOS开发资料收集
UIButton下image和title的各种位置的分类封装

UIButton下image和title的各种位置的分类封装

作者: Helong | 来源:发表于2016-08-11 17:29 被阅读272次

    为了防止丢失或遗忘,记录下这个UIButton的分类,用来实现上下,左右的iamge与title位置的按钮布局。


    .h文件

    #import@interface UIButton (typeLayout)

    typedef NS_ENUM(NSUInteger,HLButtonEdgeInsetsStyle)

    {

    HLButtonEdgeInsetsStyleTop,//image在上,label在下

    HLButtonEdgeInsetsStyleLeft,//image在左,label在右

    HLButtonEdgeInsetsStyleBottom,//image在下,label在上

    HLButtonEdgeInsetsStyleRight//image在右,label在左

    };

    /**

    *  设置button内部的image和title的布局样式

    *

    *  @param style 布局样式

    *  @param space 间距

    */

    - (void)layoutButtonWithEdgeInsetsStyle:(HLButtonEdgeInsetsStyle)style imageTitleSpace:(CGFloat)space;

    @end


    .m文件

    #import "UIButton+typeLayout.h"

    @implementation UIButton (typeLayout)

    - (void)layoutButtonWithEdgeInsetsStyle:(HLButtonEdgeInsetsStyle)style imageTitleSpace:(CGFloat)space

    {

    //1、得到imageView和titleLabel的宽、高

    CGFloat imageWidth = self.imageView.frame.size.width;

    CGFloat imageHeight = self.imageView.frame.size.height;

    CGFloat labelWidth = 0;

    CGFloat labelHeight = 0;

    if([UIDevice currentDevice].systemVersion.floatValue >=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、声明全局的imageEdgeInsets和labelEdgeInsets

    UIEdgeInsets imageEdgeInsets = UIEdgeInsetsZero;

    UIEdgeInsets labelEdgeInsets = UIEdgeInsetsZero;

    //3、根据style和space设置

    switch (style) {

    case HLButtonEdgeInsetsStyleTop:

    imageEdgeInsets = UIEdgeInsetsMake(-labelHeight-space/2.0, 0, 0, -labelWidth);

    labelEdgeInsets = UIEdgeInsetsMake(0, -imageWidth, -imageHeight-space/2.0, 0);

    break;

    case HLButtonEdgeInsetsStyleLeft:

    imageEdgeInsets = UIEdgeInsetsMake(0, -space/2.0, 0, space/2.0);

    labelEdgeInsets = UIEdgeInsetsMake(0, space/2.0, 0, space/2.0);

    break;

    case HLButtonEdgeInsetsStyleBottom:

    imageEdgeInsets = UIEdgeInsetsMake(0, 0, -labelHeight-space/2.0, -labelWidth);

    labelEdgeInsets = UIEdgeInsetsMake(-labelHeight-space/2.0, 0, -imageWidth, 0);

    break;

    case HLButtonEdgeInsetsStyleRight:

    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;

    default:

    break;

    }

    self.titleEdgeInsets = labelEdgeInsets;

    self.imageEdgeInsets = imageEdgeInsets;

    }

    @end

    直接调用,方便快捷!

    相关文章

      网友评论

        本文标题:UIButton下image和title的各种位置的分类封装

        本文链接:https://www.haomeiwen.com/subject/txdssttx.html