咱们知道,在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)];
最后的效果图: