UIEdgeInsets

也许是因为我总不好理解inset是什么意思,所以每次遇到这个属性,我都得先查一遍,倒不如自己写下来,好好理解。如果这样还是记不住的吧,那记下来,也方便自己查,不用每次都去各种搜了!

一、UIEdgeInsets

edge:边缘
inset:插图、嵌入

二、UIEdgeInsets 是一个结构体,定义如下:

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

四个值依次:上、左、下、右,代表的是距离上边界、左边界、下边界、右边界的位移,默认都是0。
属性的含义:specify amount to inset (positive) for each of the edges. values can be negative to 'outset',也就是设置距离边界的值,一般都用在button上

三、UIButton的UIEdgeInsets属性

contentEdgeInsets
titleEdgeInsets
imageEdgeInsetss
contentEdgeInsets

UIButton中有一个UILabel和一个UIImageView。如果给按钮设置contentEdgeInsets属性,就是按钮的内容整体(包含UILabel和UIImageView)进行偏移。

button.contentEdgeInsets = UIEdgeInsetsMake(10, 10, -10, -10);
按钮的内容整体向右移动10个像素
titleEdgeInsets & imageEdgeInsets

看名字就知道,titleEdgeInsets是对UIButton中UILabel起作用的,imageEdgeInsets是对UIButton中UIImageView起作用的。这两个属性一般一起使用。

那么titleEdgeInsets和imageEdgeInsets分别以什么为标准呢?
image的UIEdgeInsets属性的top,left,bottom都是相对于按钮的,right是相对于title;
title的UIEdgeInsets属性的top,bottom,right都是相对于按钮的,left是相对于image;

这样我们就可以对UIButton中的UILabel和UIImageView进行位置调整。

1.默认情况:图片在左边,文字在右边

2.图片在右,文字在左
 CGFloat imageWidth = self.allButton.imageView.size.width;
 [self.allButton.titleLabel sizeToFit];
 CGFloat titleWidth =self.allButton.titleLabel.frame.size.width;
 [self.allButton setImageEdgeInsets:UIEdgeInsetsMake(0,titleWidth,0,-titleWidth)];
 [self.allButton setTitleEdgeInsets:UIEdgeInsetsMake(0,-imageWidth,0,imageWidth)];

3.图片在上,文字在下
self.allButton.imageEdgeInsets = UIEdgeInsetsMake(-imageSize.height/2, titleSize.width/2, imageSize.height/2, -titleSize.width/2);
self.allButton.titleEdgeInsets = UIEdgeInsetsMake(titleSize.height/2, -imageSize.width/2, -titleSize.height/2, imageSize.width/2);

4.图片在下,文字在在
self.allButton.titleEdgeInsets = UIEdgeInsetsMake(0, titleSize.width/2, titleSize.height+5, - titleSize.width/2);
self.allButton.imageEdgeInsets = UIEdgeInsetsMake(imageSize.height+13, self.allButton.bounds.size.width/2 + imageSize.width/2, 0,0);

你可能感兴趣的:(UIEdgeInsets)