標籤:
Xcode內建的UIButton控制項是沒有辦法根據文字內容計算自身的寬和高的,下面示範一下問題,
我用代碼方式建立一個UIButton,並且設定了一些屬性,下面看一下
一切都是這麼的美好,跟我們想要的一樣啊,btn也跟著文字內容進行自身寬高的更改了啊!那我再設定多一點文字
懷著滿懷激動的心情,再看一下
哇哦,怎麼變成這個樣子了。文字內容都超出btn控制項了,跟我們想象的不一樣啊。這個問題該如何解決呢?
既然Xcode內建的UIButton類滿足不了我們的需求。那麼我們就自訂一個UIButton類,只需要繼承UIButton就可以了
我在.m檔案中重寫init方法
其實就是執行個體化的時候,給Button內部添加了一個uilable控制項,這個uilable控制項和button之間有約束。首先大家應該懂得系統內建的button控制項中有兩個子控制項,UIImageView 和 UILable,
因為系統內建的UILable和父控制項UIButton之間的約束不滿足我們目前的需求,所以我重新建立一個UILable,自己設定約束,把文字資訊顯示在自己建立的UILable上面,不用系統內建的uilable了。下面重寫方法
當我把這三個方法重寫完畢以後,我再給btn設定有關文本的屬性的時候,就會調用上面的方法,那麼,我重寫就是為了把文字資訊本來是設定在UIButton內建的UILable上面的,我重寫以後就會把文字資訊設定在我自己建立的lable上面,lable會根據文字內容改變自己的大小,因為lable與button之間也有約束,所以Button也會跟著改變了。
下面看一下效果
和我們想要的效果就一樣了。
總結:由於UIButton控制項有兩個子控制項:UIImageView(用來顯示圖片),UILable(用來顯示文字);但是系統定義的UILable和UIButton之間的約束不滿足我們目前的需求,所以我自己定義一個類,繼承UIButton,在初始化的時候,給UIButton再添加一個自己定義的UILable控制項,把這個UILable控制項和Button之間的約束設定為目前我們需求的約束。當我再給Button設定文字的時候,就設定給自訂的UILable控制項中(也就是重寫的那幾個方法),這個時候自訂的UILable灰根據文字的內容自動計算自己的寬高,因為UILable和button之間有約束,button自身的寬高也會跟著改變。所以button本身內建的UILable我們就不使用了,
iOS 讓UIButton根據文字內容自動計算寬高