咱們知道,在UIButton中有一個UILabel和一個UIImageView,同時還有屬性: titleEdgeInsets,imageEdgeInsets。介紹下 imageEdgeInsets 和 titleEdgeInsets 的用法。測試
首先,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)];
最後的效果圖: