UIButton內有兩個控件titleLabel和imageView,能夠用來顯示一個文本和圖片,這裏的圖片區別於背景圖片。給UIButton設置了title和image後,它們會圖片在左邊,文本在圖片右邊顯示。它們兩個作爲一個總體依賴於button的contentHorizontalAlignment居左居右或居中顯示。測試
1.當button.width < image.width時,只顯示被壓縮後的圖片,圖片是按fillXY的方式壓縮。spa
2.當button.width > image.width,且 button.width < (image.width + text.width)時,圖片正常顯示,文本被壓縮。orm
3.當button.width > (image.width + text.width),二者並列默認居中顯示,可經過button的屬性contentHorizontalAlignment改變對齊方式。圖片
4.想兩改變兩個子控件的顯示位置,能夠分別經過setTitleEdgeInsets和setImageEdgeInsets來實現。須要注意的是,對titleLabel和imageView設置偏移,是針對它當前的位置起做用的,並非針對它距離button邊框的距離的。我測試下來,當button的contentHorizontalAlignment爲居中時,偏移的距離和實際傳的值有些誤差,沒有發現規律,看不到源碼也沒在研究,但把button的contentHorizontalAlignment設爲居左時,contentVerticalAlignment設爲居上時,能夠很方便的經過EdgeInsets改變兩個子控件的位置。居左時,運行結果如圖1.源碼
前提:UIButton: width=220, height=100, image: width=height=36 text width=62it
想要讓圖片和文本上下排列,須要讓image向下偏移10(距離上邊間隙),而後向右偏移92( button.width - image.width / 2),計算下來爲 [btn setImageEdgeInsets:UIEdgeInsetsMake(5, 92, 0, 0)],它的偏移是針對它圖1時的位置,若是想向上偏移傳的爲負值。im
下面要計算機文本偏移了,向下偏移46 (36+10 圖片的高度+間隙),向右偏移44 ( (button.width - text.width) / 2 - image.width );由於文本自己起始x方向位置是從image.width開始的,因此算偏移時,要減掉這個寬度。計算結果爲[btn setTitleEdgeInsets:UIEdgeInsetsMake(46, 44, 0, 0)];img
圖1計算機