iOS开发 关于button的titleLabel和imageV

2018-05-29  本文已影响0人  Kingsleeeey

原理

1.titleEdgeInsets是title相对于其上下左右的inset,跟tableView的contentInset是类似的;
2.如果只有title,那它上下左右都是相对于button的,image也是一样;
3.如果同时有image和label,那这时候image的上左下是相对于button,右边是相对于label的;title的上右下是相对于button,左边是相对于image的。
直接上代码,通常的设置我们会这样做:

[self.navView.centerButton setTitleEdgeInsets:UIEdgeInsetsMake(0.0, -CGRectGetWidth(self.navView.centerButton.imageView.frame), 0.0, CGRectGetWidth(self.navView.centerButton.imageView.frame) + self.arrowPadding)];
[self.navView.centerButton setImageEdgeInsets:UIEdgeInsetsMake(0.0, CGRectGetWidth(self.navView.centerButton.titleLabel.frame) + self.arrowPadding, 0.0, -CGRectGetWidth(self.navView.centerButton.titleLabel.frame))];

相对比较繁琐且每个地方都得设置。

下面我们通过category自定义button的titleLabel和imageView的位置,方便使用

typedef NS_ENUM(NSUInteger, MKButtonEdgeInsetsStyle) {
    MKButtonEdgeInsetsStyleTop, // image在上,label在下
    MKButtonEdgeInsetsStyleLeft, // image在左,label在右
    MKButtonEdgeInsetsStyleBottom, // image在下,label在上
    MKButtonEdgeInsetsStyleRight // image在右,label在左
};

@interface UIButton (ImageTitleSpacing)

/**
 *  设置button的titleLabel和imageView的布局样式,及间距
 *
 *  @param style titleLabel和imageView的布局样式
 *  @param space titleLabel和imageView的间距
 */
- (void)layoutButtonWithEdgeInsetsStyle:(MKButtonEdgeInsetsStyle)style
                        imageTitleSpace:(CGFloat)space;

运用分类一行代码即可实现。

这里参考GitHub上开源项目# MKButtonStyle
感谢作者# mokong分享

上一篇下一篇

猜你喜欢

热点阅读