溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

iOS怎么將UIButton中的圖片與文字上下對(duì)齊

發(fā)布時(shí)間:2021-02-20 11:12:18 來(lái)源:億速云 閱讀:586 作者:小新 欄目:移動(dòng)開(kāi)發(fā)

這篇文章將為大家詳細(xì)講解有關(guān)iOS怎么將UIButton中的圖片與文字上下對(duì)齊,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

設(shè)置圖片和文字

如示例代碼:

func initView() -> Void {
var button:UIButton = UIButton(frame: CGRectMake(100, 200, 100, 100))

button.setImage(UIImage(named: "button.png"), forState: UIControlState.Normal)
button.setTitle("按鈕", forState: UIControlState.Normal)
button.backgroundColor = UIColor.blueColor()

self.view.addSubview(button)
}

我們可以通過(guò)UIButton的setTitle和setImage方法分別為按鈕設(shè)置圖片和文字信息,但是會(huì)發(fā)現(xiàn)設(shè)置完成以后我們的圖片和文字并沒(méi)有重合排列,也沒(méi)有上下排列,而是一個(gè)左右排列的樣子。

iOS怎么將UIButton中的圖片與文字上下對(duì)齊
設(shè)置圖片和文字

說(shuō)到這里,肯定會(huì)有人想到設(shè)置圖片和文字的frame來(lái)進(jìn)行處理,而且我們也確實(shí)可以通過(guò)UIButton的對(duì)象獲取到對(duì)應(yīng)的imageView和titleLabel,但是如果經(jīng)過(guò)測(cè)試的話,你就會(huì)發(fā)現(xiàn)這是一個(gè)trike的方法,而且是不生效的。

func initView() -> Void {
var button:UIButton = UIButton(frame: CGRectMake(100, 200, 100, 100))

button.setImage(UIImage(named: "button.png"), forState: UIControlState.Normal)
button.setTitle("按鈕", forState: UIControlState.Normal)
button.backgroundColor = UIColor.blueColor()
button.titleLabel?.frame = CGRectMake(20, 0, 30, 30)
button.imageView?.frame = CGRectMake(0, 0, 20, 20)

self.view.addSubview(button)
}

修改為這樣以后,運(yùn)行程序,會(huì)發(fā)現(xiàn)對(duì)應(yīng)的視圖沒(méi)有任何變化。

iOS怎么將UIButton中的圖片與文字上下對(duì)齊
添加frame設(shè)置

UIEdgeInsets

查看UIButton的屬性,我們會(huì)找到titleEdgeInsets和imageEdgeInsets兩個(gè)屬性。修改這兩個(gè)屬性,可以實(shí)現(xiàn)我們想要的效果。

titleEdgeInsets和imageEdgeInsets都是UIEdgeInsets的對(duì)象,我們先說(shuō)一下UIEdgeInsets的幾個(gè)屬性的具體效果。

我們知道,UIEdgeInsets有top,left,bottom,right幾個(gè)屬性,但是通過(guò)測(cè)試,就會(huì)發(fā)現(xiàn)設(shè)置了top以后自己的y坐標(biāo)并沒(méi)有增加響應(yīng)的距離,而是增加了1/2,那么它們到底應(yīng)該如何計(jì)算呢?

當(dāng)設(shè)置了top以后,其實(shí)就是相當(dāng)于view的上邊緣向下移動(dòng)了相應(yīng)的距離。用在title中,如果titleLabel的frame(50, 50, 24, 24);那么Button的上下邊緣應(yīng)該分別是0和124,因?yàn)檎G闆r下titleLabel必然處于Button的中間位置。當(dāng)設(shè)置了titleEdgeInsets的top為10以后,相當(dāng)于button的上下坐標(biāo)為10,124,則titleLabel的坐標(biāo)就變成了(50, 55, 24, 24),也就是上下邊緣變?yōu)榱?5和79, 向下移動(dòng)了5個(gè)點(diǎn)。

經(jīng)過(guò)計(jì)算可以得出,如果要將文字移動(dòng)到圖片的下方,需要設(shè)置titleEdgeInsets和imageEdgeInsets,且分別設(shè)置為
若titleLabel為 w1,h2, imageView為w2,h3, 上下間距為space

titleEdgeInsets = (h3 + space, - w2, 0, 0)
imageEdgeInsets = (-h2 - space, w1)

如上述例子若改為:

func initView() -> Void {
var button:UIButton = UIButton(frame: CGRectMake(100, 200, 100, 100))

button.setImage(UIImage(named: "button.png"), forState: UIControlState.Normal)
button.setTitle("按鈕", forState: UIControlState.Normal)
button.backgroundColor = UIColor.blueColor()

var imageSize:CGSize = button.imageView!.frame.size
var titleSize:CGSize = button.titleLabel!.frame.size
button.titleEdgeInsets = UIEdgeInsets(top: 0, left:-imageSize.width, bottom: -imageSize.height - 5, right: 0)
button.imageEdgeInsets = UIEdgeInsets(top: -titleSize.height - 5, left: 0, bottom: 0, right: -titleSize.width)
self.view.addSubview(button)
}

則可實(shí)現(xiàn)我們要求的效果:

iOS怎么將UIButton中的圖片與文字上下對(duì)齊
設(shè)置insets

注意:如果設(shè)置了button的frame,而且button的寬度不足以同時(shí)顯示圖片和文字的大小的話,titleLabel的size將會(huì)獲取錯(cuò)誤。所以如果需要設(shè)置frame,建議先將button的寬度設(shè)置為frame.size.width * 2, 等titleEdgeInsets和imageEdgeInsets全部設(shè)置完成以后再重新設(shè)置frame。

關(guān)于“iOS怎么將UIButton中的圖片與文字上下對(duì)齊”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI