美文网首页
任意排布button的图片和文字

任意排布button的图片和文字

作者: edison0428 | 来源:发表于2017-06-01 22:07 被阅读18次

    如果对于UIButton中的titleEdgeInsets和imageEdgeInsets不是很明白的,先参考:http://www.jianshu.com/p/1f1c9dada4dd

    二话不说,直接上代码
    .h文件

    typedef enum {
        UIButtonTitleWithImageAlignmentUp = 0,  // image is up, title is down
        UIButtonTitleWithImageAlignmentLeft,    // image is left, title is right
        UIButtonTitleWithImageAlignmentDown,    // image is down, title is up
        UIButtonTitleWithImageAlignmentRight    // image is right, title is left
    } UIButtonTitleWithImageAlignment;
    
    
    @interface EYImgTextButton : UIButton
    
    
    @property (nonatomic) CGFloat imgTextDistance;  //  image and title的之间的Distance,
    
    @property(nonatomic,assign)UIButtonTitleWithImageAlignment buttonTitleWithImageAlignment;
    
    @end
    

    .m文件

    - (instancetype)initWithFrame:(CGRect)frame
    {
        self = [super initWithFrame:frame];
        if (self) {
            
            _imgTextDistance=5;
            _buttonTitleWithImageAlignment=UIButtonTitleWithImageAlignmentLeft;
            //default Alignment is in order to facilitate the layout
            [self setContentHorizontalAlignment:UIControlContentHorizontalAlignmentLeft];
            [self setContentVerticalAlignment:UIControlContentVerticalAlignmentTop];
        }
        return self;
    }
    
    -(void)layoutSubviews{
        
        [super layoutSubviews];
        
        [self setUpImgTitleConstraints];
    }
    
    
    -(void)setUpImgTitleConstraints{
        
        CGFloat buttonWidth = self.frame.size.width;
        CGFloat buttonHeight = self.frame.size.height;
        CGFloat imgWidth = self.imageView.image.size.width;
        CGFloat imgHeight = self.imageView.image.size.height;
        CGSize textSize = [self.titleLabel.text sizeWithAttributes:@{NSFontAttributeName:self.titleLabel.font}];
        CGFloat textWitdh = textSize.width;
        CGFloat textHeight = textSize.height;
        
        CGFloat interval;      // distance between the whole image title part and button
        CGFloat imgOffsetX;    // horizontal offset of image
        CGFloat imgOffsetY;    // vertical offset of image
        CGFloat titleOffsetX;  // horizontal offset of title
        CGFloat titleOffsetY;  // vertical offset of title
        
        if (_buttonTitleWithImageAlignment == UIButtonTitleWithImageAlignmentUp) {
            interval = (buttonHeight - (imgHeight + _imgTextDistance + textHeight)) / 2;
            imgOffsetX = (buttonWidth - imgWidth) / 2;
            imgOffsetY = interval;
            titleOffsetX = (buttonWidth - textWitdh) / 2 - imgWidth;
            titleOffsetY = interval + imgHeight + _imgTextDistance;
        }else if (_buttonTitleWithImageAlignment == UIButtonTitleWithImageAlignmentLeft) {
            interval = (buttonWidth - (imgWidth + _imgTextDistance + textWitdh)) / 2;
            imgOffsetX = interval;
            imgOffsetY = (buttonHeight - imgHeight) / 2;
            titleOffsetX = buttonWidth - (imgWidth + textWitdh + interval);
            titleOffsetY = (buttonHeight - textHeight) / 2;
        }else if (_buttonTitleWithImageAlignment == UIButtonTitleWithImageAlignmentDown) {
            interval = (buttonHeight - (imgHeight + _imgTextDistance + textHeight)) / 2;
            imgOffsetX = (buttonWidth - imgWidth) / 2;
            imgOffsetY = interval + textHeight + _imgTextDistance;
            titleOffsetX = (buttonWidth - textWitdh) / 2 - imgWidth;
            titleOffsetY = interval;
        }else if (_buttonTitleWithImageAlignment == UIButtonTitleWithImageAlignmentRight) {
            interval = (buttonWidth - (imgWidth + _imgTextDistance + textWitdh)) / 2;
            imgOffsetX = interval + textWitdh + _imgTextDistance;
            imgOffsetY = (buttonHeight - imgHeight) / 2;
            titleOffsetX = - (imgWidth - interval);
            titleOffsetY = (buttonHeight - textHeight) / 2;
        }
        [self setImageEdgeInsets:UIEdgeInsetsMake(imgOffsetY, imgOffsetX, 0, 0)];
        [self setTitleEdgeInsets:UIEdgeInsetsMake(titleOffsetY, titleOffsetX, 0, 0)];
        
    }
    
    

    直接拿过来就能用,支持masonry

    相关文章

      网友评论

          本文标题:任意排布button的图片和文字

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