最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

iOS如何將UIButton中的圖片與文字上下對(duì)齊詳解

 更新時(shí)間:2017年10月19日 10:28:25   作者:iOS_ziank  
對(duì)于UIButton實(shí)現(xiàn)上顯示圖片,下顯示文字這個(gè)需求估計(jì)各位iOS開發(fā)者們都不陌生,所以下面這篇文章主要給大家介紹了關(guān)于iOS如何將UIButton中圖片與文字上下對(duì)齊的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。

前言

相信每位iOS開發(fā)者都知道在UIButton中可以設(shè)置圖片和文字,也經(jīng)常見到同時(shí)設(shè)置有圖片和下方提示文字的按鈕,但是當(dāng)我自己去對(duì)圖片按鈕添加提示文字的時(shí)候,卻發(fā)現(xiàn)這并不是想象中的那么簡(jiǎn)單。怎么不簡(jiǎn)單呢?下面來一起看看詳細(xì)的介紹吧。

設(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)
}

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


設(shè)置圖片和文字

說到這里,肯定會(huì)有人想到設(shè)置圖片和文字的frame來進(jìn)行處理,而且我們也確實(shí)可以通過UIButton的對(duì)象獲取到對(duì)應(yīng)的imageView和titleLabel,但是如果經(jīng)過測(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)的視圖沒有任何變化。


添加frame設(shè)置

UIEdgeInsets

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

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

我們知道,UIEdgeInsets有top,left,bottom,right幾個(gè)屬性,但是通過測(cè)試,就會(huì)發(fā)現(xiàn)設(shè)置了top以后自己的y坐標(biāo)并沒有增加響應(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)過計(jì)算可以得出,如果要將文字移動(dòng)到圖片的下方,需要設(shè)置titleEdgeInsets和imageEdgeInsets,且分別設(shè)置為
若titleLabel為 w1,h1, imageView為w2,h2, 上下間距為space

titleEdgeInsets = (h2 + space, - w2, 0, 0)
imageEdgeInsets = (-h1 - 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)我們要求的效果:


設(shè)置insets

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

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,本文還有許多不足,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • iOS利用UIScrollView實(shí)現(xiàn)圖片的縮放實(shí)例代碼

    iOS利用UIScrollView實(shí)現(xiàn)圖片的縮放實(shí)例代碼

    本篇文章主要介紹了iOS利用UIScrollView實(shí)現(xiàn)圖片的縮放實(shí)例代碼,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-07-07
  • iOS Xcode自定義代碼塊及遷移的實(shí)現(xiàn)方法

    iOS Xcode自定義代碼塊及遷移的實(shí)現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于iOS Xcode自定義代碼塊及遷移的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用iOS Xcode具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • iOS之Cocoapods安裝教程(全面解析)

    iOS之Cocoapods安裝教程(全面解析)

    下面小編就為大家?guī)硪黄猧OS之Cocoapods安裝教程(全面解析)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • iOS開發(fā)中Date Picker和UITool Bar控件的使用簡(jiǎn)介

    iOS開發(fā)中Date Picker和UITool Bar控件的使用簡(jiǎn)介

    這篇文章主要介紹了iOS開發(fā)中Date Picker和UITool Bar控件的使用簡(jiǎn)介,代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下
    2016-01-01
  • iOS NSNotificationCenter通知中心使用小結(jié)

    iOS NSNotificationCenter通知中心使用小結(jié)

    IOS中經(jīng)常會(huì)使用到NSNotification和delegate來進(jìn)行一些類之間的消息傳遞,這篇文章主要介紹了iOS NSNotificationCenter使用小結(jié),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-11-11
  • Flutter列表滾動(dòng)定位超強(qiáng)輔助庫(kù)使用示例詳解

    Flutter列表滾動(dòng)定位超強(qiáng)輔助庫(kù)使用示例詳解

    這篇文章主要為大家介紹了Flutter列表滾動(dòng)定位超強(qiáng)輔助庫(kù)使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 百度云推送圖文教程IOS

    百度云推送圖文教程IOS

    這篇文章主要介紹了百度云推送圖文教程IOS 的相關(guān)資料,需要的朋友可以參考下
    2016-01-01
  • iOS 正則表達(dá)式判斷手機(jī)號(hào)碼、固話

    iOS 正則表達(dá)式判斷手機(jī)號(hào)碼、固話

    本文主要介紹了iOS 正則表達(dá)式判斷手機(jī)號(hào)碼、固話,以及匹配是否是移動(dòng)/聯(lián)通/電信手機(jī)號(hào)的方法。具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2017-03-03
  • 解決ios模擬器不能彈出鍵盤問題的方法

    解決ios模擬器不能彈出鍵盤問題的方法

    這篇文章主要為大家詳細(xì)介紹了解決ios模擬器不能彈出鍵盤問題的方法,大多數(shù)原因是誤用了快捷鍵,如何解決?感興趣的小伙伴們可以參考一下
    2016-03-03
  • iOS中WKWebView的一些特殊使用總結(jié)

    iOS中WKWebView的一些特殊使用總結(jié)

    這篇文章主要給大家介紹了關(guān)于iOS中WKWebView的一些特殊使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用iOS具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12

最新評(píng)論

阜阳市| 宁德市| 嵩明县| 山东省| 石首市| 普兰县| 樟树市| 佛教| 高平市| 黔西县| 庐江县| 古浪县| 石楼县| 麻江县| 陈巴尔虎旗| 平阳县| 措勤县| 永和县| 武鸣县| 获嘉县| 闽清县| 尚义县| 惠水县| 奇台县| 固始县| 东港市| 清徐县| 河北省| 陕西省| 乌鲁木齐县| 西林县| 泰顺县| 图们市| 屏东县| 贵定县| 开封县| 嘉善县| 微山县| 攀枝花市| 余江县| 陆川县|