一。当button上面只有文字或者是只有图片的时候文字或者图片都会居中显示。
UIEdgeInsets实际就是一个结构体(之前在这写的是枚举,感谢
提出的错误),
UIEdgeInsetsMake(<#CGFloat top#>, <#CGFloat left#>, <#CGFloat bottom#>, <#CGFloat right#>)
要设置的就是四个边距,先看一张图:
image_2.png
图中,蓝色标识为可变区域, 绿色标识为不变区域。UIEdgeInsets结构体的属性top与bottom为一对,用来指定纵向可变区域(黑色虚线矩形),left与right为一对,用来指定横向可变区域(白色虚线矩形)。当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)];