UIButton文字和图片平滑的交换位置

UIButton中,如果文字和图片都同时存在的话,系统默认图片在左边,文字在右边,有些UI需求是图片在右边,文字在左边,这就需要用代码调试,使UIButton中两个元素的位置发生交换。
设置UIButton的两个属性可以达到交换的目的,这两个属性是titleEdgeInsetsimageEdgeInsets.
UIEdgeInsets为一个结构体

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

这个结构体表示上,左,下,右的偏移量,
top : 为正数的时候,是往下偏移,为负数的时候往上偏移;
left : 为正数的时候往右偏移,为负数的时候往左偏移;
bottom : 为正数的时候往上偏移,为负数的时候往下偏移;
right:为正数的时候往左偏移,为负数的时候往右偏移;
两个元素,文字和图片交换的第一步,要取得这两个元素的宽度值

CGFloat labelWidth = button.titleLabel.intrinsicContentSize.width; //注意不能直接使用titleLabel.frame.size.width,原因为有时候获取到0值CGFloat imageWidth = button.imageView.frame.size.width;CGFloat space = 8.f; //定义两个元素交换后的间距

第二步设置button偏移量属性

button.titleEdgeInsets = UIEdgeInsetsMake(0, - imageWidth - space,0,imageWidth + space);
button.imageEdgeInsets = UIEdgeInsetsMake(0, labelWidth + space, 0, -labelWidth - space);

参考地址

你可能感兴趣的:(UIButton文字和图片平滑的交换位置)