一。當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)];