在使用UIButton的時候畏鼓,大家對setImageEdgeInsets、setTitleEdgeInsets壶谒、setContentEdgeInsets了解嗎云矫??
以前寫代碼如果單獨只有一個的話汗菜,用著也不用那么費事让禀,一般設(shè)置也都是文字居中,或者圖片居中陨界。這些系統(tǒng)都為你自動計算好了巡揍,而且擺放好了位置。
復(fù)雜一點的話菌瘪,文字居左或者居右:contentHorizontalAlignment 這個屬性可以滿足大家的需求腮敌。
如果Image和title同時存在呢?或者現(xiàn)在需要:有個圖片和文字的Button或者View俏扩。最開始的時候我一般都是設(shè)個UIButton然后放上去一個ImageView和UILabel糜工,是不是太遜了。o(╯□╰)o
以前對UIButton的三個EdgeInsets感覺老是摸不著邊录淡,其實總結(jié)一句話:UIButton 中的內(nèi)容都是默認(rèn)居中捌木,設(shè)置EdgeInsets之后還是居中。
詳解:
一:只設(shè)置Image
然后設(shè)置setImageEdgeInsets之后通過Debug View 查看ImageView的frame嫉戚,得到數(shù)據(jù):(Unbutton的Width都為335钮莲,圖片的Size為(32,32))
ImageView.x ? ? ? ? ? ?ImageEdgeInsets ? ? ? ? ? ? ? ? ? ? ? ?x得到的規(guī)則
151.5 ? ? ? ? ? ? ? ? ? ? ? (0, 0, 0, 0) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(335 - 32 )/ 2
156.5 ? ? ? ? ? ? ? ? ? ? ? (0, 10, 0, 0) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(335 - 32 - 10 )/ 2 + 10
101.5? ? ? ? ? ? ? ? ? ? ? (0, 0, 0, 100) ? ? ? ? ? ? ? ? ? ? ? ? ? ? (335 - 32 - 100 )/ 2 + 0
106.5? ? ? ? ? ? ? ? ? ? ? (0, 10, 0, 100) ? ? ? ? ? ? ? ? ? ? ? ? ? (335 - 32 - 10 - 100 )/ 2 + 10
是不是發(fā)現(xiàn)規(guī)律了彼水,就是(button的寬度 - 離左右的距離 - 圖片的寬度)/ 2 + 離左邊的距離。所以還是居中嘍极舔。
只有title的自己可以試試哈凤覆。
二:既設(shè)置Image,又設(shè)置title
然后設(shè)置setImageEdgeInsets拆魏、setTitleEdgeInsets之后通過Debug View 查看ImageView的frame盯桦,得到數(shù)據(jù):(Unbutton的Width都為335,圖片的Size為(32渤刃,32))
UIButton *tempButton = [UIButton buttonWithType:UIButtonTypeCustom];
tempButton.frame = CM(20, 100, Screen_Width - 40, 40);
tempButton.backgroundColor = OrangeColor;
[tempButton setTitle:@"秀美甲" forState:UIControlStateNormal];
[tempButton setImage:[UIImage imageNamed:@"first_selected"] forState:UIControlStateNormal];
tempButton.imageView.backgroundColor = RedColor;
[self.view addSubview:tempButton];
ImageView.x ? ?Label.frame ? ? ? ? ?ImageEdgeInsets ? ? ?TitleEdgeInsets ?
124.5? ? ? ? ? (156.5,9.5,54,21.5) ? ? ?(0,0,0,0) ? ? ? ? ? ? ? ? ? (0,0,0,0)
149.5? ? ? ? ? (156.5,9.5,54,21.5)? ? ? (0,50,0,0) ? ? ? ? ? ? ? ? (0,0,0,0)
149.5? ? ? ? ? (106.5,9.5,54,21.5)? ? ? (0,50,0,0) ? ? ? ? ? ? ? ? (0,0,0,100)
ImageView.x的計算規(guī)則有一點變化了:(button的寬度 - 離左右的距離 - 圖片的寬度 -Label的寬度)/ 2 + 離左邊的距離拥峦。
Label.x 的計算規(guī)則:(button的寬度 - 離左右的距離 - 圖片的寬度 -Label的寬度)/ 2 + 離左邊的距離 + 圖片的寬度。(默認(rèn)左邊總有你設(shè)置的圖片似得)
既有圖片又有title的話卖子,計算居中時總是以他倆的寬度為一體的略号。所以也是居中
三:在第二種的基礎(chǔ)上,再設(shè)置setContentEdgeInsets
ImageView.x ? ? ? ? ? ? ? ?Label.frame ? ? ? ? ? ? ?setContentEdgeInsets
134.5? ? ? ? ? ? ? ? ? ? (166.5, 9.5, 54, 21.5) ? ? ? ? ?(0, 20, 0, 0)
這個就是在原有的基礎(chǔ)上相當(dāng)于把button的Width - 離左右邊的距離,之后再計算Image和Label的位置玄柠。
總之:還是居中突梦。