天天看點

利用UIEdgeInsets屬性修改UIButton的圖檔,文字位置

IOS的UIButtom中提供了ImageView與TitleLabel使我們可以同時顯示圖檔與文字,預設的,圖檔與文字是水準從左到右依次排列的,但是,有時候我們需要修改這種排列方式,這樣我們可以利用UIButton的UIEdgeInsets屬性。

UIEdgeInsets是一個結構體,定義了view距離其父view的top,left,bottom,right間距。

typedef struct UIEdgeInsets {
    CGFloat top, left, bottom, right;  // specify amount to inset (positive) for each of the edges. values can be negative to 'outset'
} UIEdgeInsets;
           

在UIButton中我們可以設定ImageView,TitleLabel,ContentView的UIEdgeInsets屬性。通過這個屬性,我們可以修改其imageView與TitleLabel的位置。

原文連結

[btnRight setTitleEdgeInsets:UIEdgeInsetsMake(0, -imgArrow.size.width, 0, imgArrow.size.width)];
[btnRight setImageEdgeInsets:UIEdgeInsetsMake(0, btnRight.titleLabel.bounds.size.width, 0, -btnRight.titleLabel.bounds.size.width)];

uibutton預設是左圖檔,右文字。并且在設定edge insets之前,位置已經有了設定。是以設定title的edge insets,真實的作用是在原來的邊距值基礎上增加或減少某個間距,負值便是減少。以title為例,設定右邊距增加圖檔寬度,就使得自己的右邊界距離按鈕的右邊界多了圖檔的寬度,正好放下圖檔。此時,title lable變小了,而title lable的左邊界還在原來的位置上,是以lable的左邊界距離按鈕的左邊界減少圖檔的寬度,lable就和原來一樣大了,而且左側起始位置和圖檔的左側起始位置相同了。