iOS開發(fā) 關(guān)于button的titleLabel和imageView的位置

原理

1.titleEdgeInsets是title相對于其上下左右的inset,跟tableView的contentInset是類似的;
2.如果只有title,那它上下左右都是相對于button的,image也是一樣;
3.如果同時有image和label,那這時候image的上左下是相對于button,右邊是相對于label的;title的上右下是相對于button,左邊是相對于image的。
直接上代碼,通常的設(shè)置我們會這樣做:

[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))];

相對比較繁瑣且每個地方都得設(shè)置。

下面我們通過category自定義button的titleLabel和imageView的位置,方便使用

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

@interface UIButton (ImageTitleSpacing)

/**
 *  設(shè)置button的titleLabel和imageView的布局樣式,及間距
 *
 *  @param style titleLabel和imageView的布局樣式
 *  @param space titleLabel和imageView的間距
 */
- (void)layoutButtonWithEdgeInsetsStyle:(MKButtonEdgeInsetsStyle)style
                        imageTitleSpace:(CGFloat)space;

運(yùn)用分類一行代碼即可實(shí)現(xiàn)。

這里參考GitHub上開源項(xiàng)目# MKButtonStyle
感謝作者# mokong分享

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容