UIEdgeInsetsMake

一。当button上面只有文字或者是只有图片的时候文字或者图片都会居中显示。

UIEdgeInsets实际就是一个结构体(之前在这写的是枚举,感谢

无刃之刃

提出的错误),

UIEdgeInsetsMake(<#CGFloat top#>, <#CGFloat left#>, <#CGFloat bottom#>, <#CGFloat right#>)

要设置的就是四个边距,先看一张图:

image_2.png

图中,蓝色标识为可变区域, 绿色标识为不变区域。UIEdgeInsets结构体的属性topbottom为一对,用来指定纵向可变区域(黑色虚线矩形),leftright为一对,用来指定横向可变区域(白色虚线矩形)。当UIButton/UIImageView的size大于UIImage的size时,会调整图片中可变区域大小以铺满整个控件,具体调整规则如下:

(1)控件宽度大于图片宽度,拉伸白色虚线矩形

(2)控件高度大于图片高度,拉伸黑色虚线矩形

(3)控制宽度小于图片宽度时,横向整体缩小(可变区与不变区比例不变)

(4)控制高度小于图片高度时,纵向整体缩小(可变区与不变区比例不变)


二。一定自己写个demo试一下,当button只设置一个值是,会居中,当只设置文字时,文字居中,当只设置图片是,图片居中,同时设置图片和文字时图片在左边,文字在右边,实际上是默认得把图片向左边移动了文字的宽度,而文字实际上是默认的向右移动了图片的宽度,(图片文字只想对于第一条里的蓝色区域部分,二者之间没有相对,所以UIEdgeInsetsMake的设置都是相对于蓝色区域部分来说的)

1)因为在iOS8之后-button.titleLabel.bounds.size.width的值为0  现在用 button.titleLabel.intrinsicContentSize.height

2)获取button上图片的宽度高度 button.currentImage.size.height

3)demo部分

UIButton*button = [[UIButtonalloc]init];

button.frame=CGRectMake(50,100,100,50);

button.backgroundColor= [UIColorlightGrayColor];

[self.viewaddSubview:button];

a.只有文字(没有设置Edges)

[buttonsetTitle:@"qq"forState:UIControlStateNormal];

b.只有图片(没有设置Edges)

[buttonsetImage: [UIImageimageNamed:@"newContestGroupPro"]forState:UIControlStateNormal];

c.同时设置文字和图片时(没有设置Edges)


d.如果我想要把图片居中,(默认同时显示的情况上面已经讲过,即图片向左边移动了,文字向右边移动了,那要跑到中间去就要把图片向右边移动,无论向那边移动都是负值)

图片居中显示了

[buttonsetImageEdgeInsets:UIEdgeInsetsMake(0,0,0, -button.titleLabel.intrinsicContentSize.width)];


e.文字居中显示


[buttonsetTitleEdgeInsets:UIEdgeInsetsMake(0, -button.currentImage.size.width,0,0)];

f.现在要把文字放到图片的正上方。(不要把上一步的文字向左移的给忘记了,向左移不能写成0)

[buttonsetTitleEdgeInsets:UIEdgeInsetsMake(-30, -button.currentImage.size.width,0,0)];

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容