Button內部圖片文字各種排版

創建一個UIButton+Layout.h分類,支持Frame、Masonry,直接將代碼粘出即可

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

typedef NS_ENUM(NSUInteger, WJLayoutStatus){
    /** 正常位置,圖左字右 */
    WJLayoutStatusNormal,
    /** 圖右字左 */
    WJLayoutStatusImageRight,
    /** 圖上字下 */
    WJLayoutStatusImageTop,
    /** 圖下字上 */
    WJLayoutStatusImageBottom,
};

@interface UIButton (Layout)

- (void)layoutWithStatus:(WJLayoutStatus)status
               andMargin:(CGFloat)margin;

@end

NS_ASSUME_NONNULL_END
#import "UIButton+Layout.h"

@implementation UIButton (Layout)

- (void)layoutWithStatus:(WJLayoutStatus)status
               andMargin:(CGFloat)margin {
    CGFloat imgWidth = self.imageView.bounds.size.width;
    CGFloat imgHeight = self.imageView.bounds.size.height;
    CGFloat labWidth = self.titleLabel.bounds.size.width;
    CGFloat labHeight = self.titleLabel.bounds.size.height;
    CGSize textSize = [self.titleLabel.text sizeWithAttributes:@{NSFontAttributeName:self.titleLabel.font}];
    CGSize frameSize = CGSizeMake(ceilf(textSize.width), ceilf(textSize.height));
    if (labWidth < frameSize.width) {
        labWidth = frameSize.width;
    }
    CGFloat kMargin = margin / 2.0;
    switch (status) {
        case WJLayoutStatusNormal: {
            [self setImageEdgeInsets:UIEdgeInsetsMake(0, -kMargin, 0, kMargin)];
            [self setTitleEdgeInsets:UIEdgeInsetsMake(0, kMargin, 0, -kMargin)];
        }
            break;
        case WJLayoutStatusImageRight: {
            [self setImageEdgeInsets:UIEdgeInsetsMake(0, labWidth + kMargin, 0, -labWidth - kMargin)];
            [self setTitleEdgeInsets:UIEdgeInsetsMake(0, -imgWidth - kMargin, 0, imgWidth + kMargin)];
        }
            break;
        case WJLayoutStatusImageTop: {
            [self setImageEdgeInsets:UIEdgeInsetsMake(0, 0, labHeight + margin, -labWidth)];
            [self setTitleEdgeInsets:UIEdgeInsetsMake(imgHeight + margin, -imgWidth, 0, 0)];
        }
            break;
        case WJLayoutStatusImageBottom: {
            [self setImageEdgeInsets:UIEdgeInsetsMake(labHeight + margin,0, 0, -labWidth)];
            [self setTitleEdgeInsets:UIEdgeInsetsMake(0, -imgWidth, imgHeight + margin, 0)];
        }
            break;
        default:
            break;
    }
}

@end
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章