UIButton的imageEdgeInsets 和 titleEdgeInsets

咱們知道,在UIButton中有一個UILabel和一個UIImageView,同時還有屬性: titleEdgeInsets,imageEdgeInsets。介紹下 imageEdgeInsets 和 titleEdgeInsets 的用法。測試

UIEdgeInsets

  首先,titleEdgeInsets 和 imageEdgeInsets 都是 UIEdgeInsets類型。UIEdgeInsets 是一個結構體,定義以下:spa

typedef struct UIEdgeInsets { CGFloat top, left, bottom, right; 
} UIEdgeInsets;

四個值依次是:上、左、下、右,表明的是距離上邊界、左邊界、下邊界、右邊界的位移,默認都是0。code

示例

  首先建立一個button,button有image和title,代碼以下:orm

UIButton *searchBtn = [[UIButton alloc] initWithFrame:CGRectMake(50,100,100,50)];
searchBtn.backgroundColor = [UIColor yellowColor];
[self.view addSubview:searchBtn];
UIImage *searchImage = [UIImage imageNamed:@"search"];
[searchBtn setImage:searchImage forState:UIControlStateNormal];
[searchBtn setTitle:@"測試" forState:UIControlStateNormal];
[searchBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];

此時,button的形狀是默認的,以下:blog

設置一下button 的 imageEdgeInsets:圖片

[searchBtn setImageEdgeInsets:UIEdgeInsetsMake(20, 0, 0, 0)];

含義是:image距離上側的邊距增長20,也就是image向下偏移20,此時button的形狀以下:it

[searchBtn setImageEdgeInsets:UIEdgeInsetsMake(0, -20, 0, 0)];

含義:image距左側的邊距減小20,也就是image向左偏移20,此時button的形狀以下:class

[searchBtn setImageEdgeInsets:UIEdgeInsetsMake(0, 0, 0, -20)];

含義:image距右側的距離減小20,也就是image向右偏移20,此時button的形狀以下:im

[searchBtn setImageEdgeInsets:UIEdgeInsetsMake(0,0,20,0)];

含義:距離下側的距離增長20,也就是image向上偏移20,此時button的形狀以下:top

至此,UIButton 的 imageEdgeInsets 裏面的四個參數表明的含義已經很是清楚了,同理,titleEdgeInsets的四個參數表明的含義也是同樣的。

文字和圖片位置互換

  理解了 imageEdgeInsets 和 titleEdgeInsets,如今實現將文字和圖片位置互換。

  第一步:把image移到右面,至關於上側和下側不變,左側增長一段距離,右側減小一段距離;

  第二步:把title移到左面,至關於上側和下側不變,左側減小一段距離,右側增長一段距離;

首先算出圖片和文字的寬度:

CGFloat imageWidth = searchImage.size.width;
[searchBtn.titleLabel sizeToFit];
CGFloat titleWidth = searchBtn.titleLabel.frame.size.width;

把image 移到右面:

[searchBtn setImageEdgeInsets:UIEdgeInsetsMake(0,titleWidth,0,-titleWidth)];

把title 移到左面:

[searchBtn setTitleEdgeInsets:UIEdgeInsetsMake(0,-imageWidth,0,imageWidth)];

最後的效果圖:

相關文章
相關標籤/搜索