UIButton內(nèi)有兩個控件titleLabel和imageView,可以用來顯示一個文本和圖片,這里的圖片區(qū)別于背景圖片。給UIButton設(shè)置了title和image后窃页,它們會圖片在左邊,文本在圖片右邊顯示复濒。它們兩個做為一個整體依賴于button的
contentHorizontalAlignment居左居右或居中顯示脖卖。(默認(rèn)是居中)
當(dāng)button.width < image.width時,只顯示被壓縮后的圖片巧颈,圖片是按fillXY的方式壓縮畦木。
當(dāng)button.width > image.width,且 button.width < (image.width + text.width)時砸泛,圖片正常顯示十籍,文本被壓縮。
當(dāng)button.width > (image.width + text.width),兩者并列默認(rèn)居中顯示唇礁,可通過button的屬性contentHorizontalAlignment改變對齊方式勾栗。
想兩改變兩個子控件的顯示位置,可以分別通過setTitleEdgeInsets和setImageEdgeInsets來實現(xiàn)盏筐。 需要注意的是围俘,對titleLabel和imageView設(shè)置偏移,是針對它當(dāng)前的位置起作用的琢融,并不是針對它距離button邊框的距離的界牡。
看到網(wǎng)上很多說 UIEdgeInsetsMake ( CGFloat top, CGFloat left, CGFloat bottom, CGFloat right ); 構(gòu)造出,分別表示其中的內(nèi)容/標(biāo)題/圖片離各邊的距離漾抬。剛開始搞的很郁悶不知道為什么總是設(shè)置不對宿亡。可能是我理解錯了吧纳令,需要有空在看一下官方文檔了解一下UIEdgeInsetsMake
當(dāng)?shù)谌N情況的時候挽荠,button的contentHorizontalAlignment不同,我們設(shè)置UIEdgeInsetsMake的值也是不一樣的
button:width=150 image:width=24 label:width=102
1.button.contentHorizontalAlignment=UIControlContentHorizontalAlignmentCenter;時 image離左邊的距離為(button.width-image.width-label.width)/2 = 12, 那么我們設(shè)置
[btn setImageEdgeInsets:UIEdgeInsetsMake(0, -12, 0, 0)];其實圖片只向左移了6平绩。
當(dāng)[btn setImageEdgeInsets:UIEdgeInsetsMake(0, -24, 0, 0)]坤按;或
[btn setImageEdgeInsets:UIEdgeInsetsMake(0, -12, 0, 12)];
圖片才向左移了12
所以當(dāng)button的對齊方式為居中時馒过,對應(yīng)方向偏移的距離要乘2;
2.button.contentHorizontalAlignment=UIControlContentHorizontalAlignmentLeft;時 image離左邊的距離為0酗钞,label離左邊的距離為image.width=24;
設(shè)置[btn setImageEdgeInsets:UIEdgeInsetsMake(0, 24, 0, 0)];
[btn setTitleEdgeInsets:UIEdgeInsetsMake(0, 24, 0, 0)];
圖片和文字都正確的向右移動了24距離腹忽,而不用乘2
注意:位置的偏移是按最初的原始坐標(biāo)來算的来累,比如情況2圖片的原始坐標(biāo)為(0,0)窘奏,title的原始坐標(biāo)為(24嘹锁,0),偏移一次過后第二次偏移也是按照那個原始坐標(biāo)來算着裹,而不是第一次偏移后的那個坐標(biāo)
我簡單了寫了個uibutton的分類领猾,能簡單的設(shè)置圖片離左邊的距離,和設(shè)置文字居中骇扇。
github:UIButtonDemo