也许是因为我总不好理解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);
网友评论