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)];

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容