UIButton中setTitleEdgeInsets和setImageEdgeInsets的使用

  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(59200)],它的偏移是針對它圖1時的位置,若是想向上偏移傳的爲負值。im

下面要計算機文本偏移了,向下偏移46 (36+10 圖片的高度+間隙),向右偏移44 ( (button.width - text.width) / 2  -  image.width );由於文本自己起始x方向位置是從image.width開始的,因此算偏移時,要減掉這個寬度。計算結果爲[btn setTitleEdgeInsets:UIEdgeInsetsMake(464400)];img



  圖1計算機



相關文章
相關標籤/搜索