UIButton的titleEdgeInsets和imageEdgeInsets

首先必須要了解以下四個概念

1.titleEdgeInsets是titleLabel相對于其上下左右的inset,跟》tableView的contentInset是類似的蛤织;
2.如果只有title香伴,那titleLabel的 上下左右 都是 相對于Button 的;
3.如果只有image,那imageView的 上下左右 都是 相對于Button 的恒序;
4.如果同時(shí)有image和label,那image的 上下左 是 相對于Button 的谁撼,右 是 相對于label 的歧胁;
label的 上下右 是 相對于Button的, 左 是 相對于label 的彤敛。

調(diào)整insets的例子与帆,讓圖片和文字互換位置

更改前

284517-c8d3f8b8185b5d02.png

更改后

284517-02e5e32f48c16edb.png

也就是最終我們希望圖片上下位置不變top = 0, bottom = 0;向右位移一個label的寬度

同時(shí)標(biāo)題上下位置不變top = 0, bottom = 0;向左位移一個圖片的寬度。即 imageEdgeInsets = UIEdgeInsetsMake(0,0 + labelWidth,0,0 - labelWidth); 圖片相對初始狀態(tài)左邊距加了labelWidth墨榄,右邊減labelWidth玄糟,以及titleEdgeInsets = UIEdgeInsetsMake(0,0 - imageViewWidth,0, 0 + imageViewWidth);

ls: 我是這樣理解的,UIbutton的圖片默認(rèn)insets.right已含有文字的偏移量袄秩,而文字默認(rèn)insets.left也已經(jīng)默認(rèn)含有圖片的偏移量阵翎。因此imageEdgeInsets.left 加了labelWidth之后,imageEdgeInsets.right要減去labelWidth...而titleEdgeInsets同理之剧,不然只加上Inset值而不減的話文字和圖片會同時(shí)居中

另外郭卫,補(bǔ)充一下以下四種情況:(可以寫一個分類并且給原有類加一個方法)

.h文件
typedef NS_ENUM(NSUInteger, MKButtonEdgeInsetsStyle) {
    MKButtonEdgeInsetsStyleTop, // image在上,label在下
    MKButtonEdgeInsetsStyleLeft, // image在左背稼,label在右
    MKButtonEdgeInsetsStyleBottom, // image在下贰军,label在上
    MKButtonEdgeInsetsStyleRight // image在右,label在左
};

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

.m文件
- (void)layoutButtonWithEdgeInsetsStyle:(MKButtonEdgeInsetsStyle)style
                        imageTitleSpace:(CGFloat)space
{
    // 1. 得到imageView和titleLabel的寬词疼、高
    CGFloat imageWith = self.imageView.frame.size.width;
    CGFloat imageHeight = self.imageView.frame.size.height;
    
    CGFloat labelWidth = 0.0;
    CGFloat labelHeight = 0.0;
    if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0) {
        // 由于iOS8中titleLabel的size為0,用下面的這種設(shè)置
        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. 根據(jù)style和space得到imageEdgeInsets和labelEdgeInsets的值
    switch (style) {
        case MKButtonEdgeInsetsStyleTop:
        {
            imageEdgeInsets = UIEdgeInsetsMake(-labelHeight-space/2.0, 0, 0, -labelWidth);
            labelEdgeInsets = UIEdgeInsetsMake(0, -imageWith, -imageHeight-space/2.0, 0);
        }
            break;
        case MKButtonEdgeInsetsStyleLeft:
        {
            imageEdgeInsets = UIEdgeInsetsMake(0, -space/2.0, 0, space/2.0);
            labelEdgeInsets = UIEdgeInsetsMake(0, space/2.0, 0, -space/2.0);
        }
            break;
        case MKButtonEdgeInsetsStyleBottom:
        {
            imageEdgeInsets = UIEdgeInsetsMake(0, 0, -labelHeight-space/2.0, -labelWidth);
            labelEdgeInsets = UIEdgeInsetsMake(-imageHeight-space/2.0, -imageWith, 0, 0);
        }
            break;
        case MKButtonEdgeInsetsStyleRight:
        {
            imageEdgeInsets = UIEdgeInsetsMake(0, labelWidth+space/2.0, 0, -labelWidth-space/2.0);
            labelEdgeInsets = UIEdgeInsetsMake(0, -imageWith-space/2.0, 0, imageWith+space/2.0);
        }
            break;
        default:
            break;
    }
    // 4. 賦值
    self.titleEdgeInsets = labelEdgeInsets;
    self.imageEdgeInsets = imageEdgeInsets;
}

參考文案帘腹,并感謝作者
http://www.reibang.com/p/3052a3b14a4e
http://www.reibang.com/p/62850b201049

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末贰盗,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子阳欲,更是在濱河造成了極大的恐慌舵盈,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,657評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件球化,死亡現(xiàn)場離奇詭異秽晚,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)赊窥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,662評論 3 385
  • 文/潘曉璐 我一進(jìn)店門爆惧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人锨能,你說我怎么就攤上這事扯再∩衷牛” “怎么了?”我有些...
    開封第一講書人閱讀 158,143評論 0 348
  • 文/不壞的土叔 我叫張陵熄阻,是天一觀的道長斋竞。 經(jīng)常有香客問我,道長秃殉,這世上最難降的妖魔是什么坝初? 我笑而不...
    開封第一講書人閱讀 56,732評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮钾军,結(jié)果婚禮上鳄袍,老公的妹妹穿的比我還像新娘。我一直安慰自己吏恭,他們只是感情好拗小,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,837評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著樱哼,像睡著了一般哀九。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上搅幅,一...
    開封第一講書人閱讀 50,036評論 1 291
  • 那天阅束,我揣著相機(jī)與錄音,去河邊找鬼茄唐。 笑死息裸,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的沪编。 我是一名探鬼主播界牡,決...
    沈念sama閱讀 39,126評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼漾抬!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起常遂,我...
    開封第一講書人閱讀 37,868評論 0 268
  • 序言:老撾萬榮一對情侶失蹤纳令,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后克胳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體平绩,經(jīng)...
    沈念sama閱讀 44,315評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,641評論 2 327
  • 正文 我和宋清朗相戀三年漠另,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了捏雌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,773評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡笆搓,死狀恐怖性湿,靈堂內(nèi)的尸體忽然破棺而出纬傲,到底是詐尸還是另有隱情,我是刑警寧澤肤频,帶...
    沈念sama閱讀 34,470評論 4 333
  • 正文 年R本政府宣布叹括,位于F島的核電站,受9級特大地震影響宵荒,放射性物質(zhì)發(fā)生泄漏汁雷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,126評論 3 317
  • 文/蒙蒙 一报咳、第九天 我趴在偏房一處隱蔽的房頂上張望侠讯。 院中可真熱鬧,春花似錦暑刃、人聲如沸厢漩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,859評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽袁翁。三九已至,卻和暖如春婿脸,著一層夾襖步出監(jiān)牢的瞬間粱胜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,095評論 1 267
  • 我被黑心中介騙來泰國打工狐树, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留焙压,地道東北人。 一個月前我還...
    沈念sama閱讀 46,584評論 2 362
  • 正文 我出身青樓抑钟,卻偏偏與公主長得像涯曲,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子在塔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,676評論 2 351

推薦閱讀更多精彩內(nèi)容