IOS之UI 按鈕UIButton的細節

2021-09-23 21:08:49 字數 2170 閱讀 3669

1、內部子控制項

2、按鈕拉伸問題

2-1、**拉伸

2-2、無**拉伸

如果想要改變按鈕內部子控制項的屬性,只能自定義按鈕

內邊距

// 設定按鈕內容的內邊距(影響到imageview和titlelabel)

@property(nonatomic) uiedgeinsets contentedgeinsets;

// 設定titlelabel的內邊距(影響到titlelabel)

@property(nonatomic) uiedgeinsets titleedgeinsets;

// 設定imageview的內邊距(影響到imageview)

@property(nonatomic) uiedgeinsets imageedgeinsets;

調整內部子控制項的frame的方法1但是這樣寫很麻煩,而且有個問題:

如果兩個方法內部的引數互相依賴,但是卻不清楚兩個方法的執行順序,所以容易出現異常。

然後建議使用調整內部子控制項的frame方法2,在layoutsubviews中設定子控制項的frame。

按鈕其實不需要新增子控制項的,因為按鈕內部有兩個子控制項uiimage和uilabel,可以直接使用,但是對於這兩個子控制項使用有一些注意點:uibutton的子控制項的iamgeview.image和titlelabel.text不能直接設定值,因為這兩個值(或許還有別的值,可以通過看原始碼檢視注釋)是需要有設定狀態屬性值,如果沒有設定狀態,直接訪問其屬性更改會失效。

如果想要該自己改變子控制項titilelabel的字型,直接拿出font賦值,因為font不分狀態

**拉伸

在按鈕使用了背景之後,特別是圓角,如果將按鈕拉伸很大,邊角鋸齒顯示就很明顯了,也很難看。

所以我們需要將按鈕拉伸問題進行處理:

使用uiimage物件的乙個方法resizeable...可拉伸的意思

瓦片模式:拉伸後,會將可拉伸的部分拷貝鋪設一塊一塊

拉伸模式:拉伸後,會直接將可拉伸部分直接拉大

瓦片模式,如果可拉伸部分是純單色,跟拉伸模式沒區別

// 只拉伸中間的1x1區域

最後一般專案中這個拉伸的復用的功能我們可以封裝在內部,

我們先將這個功能封裝進方法,方法名是:resizableimage

那麼寫在誰的內部比較合適,也就是誰做這個功能最合適呢?

當然是uiimage,那麼就有兩種方式,

1、分類類別拓展uiimage的方法,2、在繼承uiimage自定義類中寫

注意:類別拓展拓展成類方法比較合適哦,不然你還需要通過alloc-init建立uiimage物件,然後呼叫這個拓展的類別方法。

無**拉伸

在xcode上設定,直接好使用,不用寫**,一勞永逸。連前面匯入類別檔名都不需要了。

IOS之UI 按鈕UIButton的細節

1 內部子控制項 2 按鈕拉伸問題 2 1 拉伸 2 2 無 拉伸 如果想要改變按鈕內部子控制項的屬性,只能自定義按鈕 內邊距 設定按鈕內容的內邊距 影響到imageview和titlelabel property nonatomic uiedgeinsets contentedgeinsets 設...

iOS之UI 轉場動畫

1.什麼是轉場動畫?就是從乙個場景轉換到另乙個場景,像導航控制器的push效果,就是乙個轉場.2.如何建立轉場動畫 建立轉場動畫 catransition anim catransition animation 設定轉場型別 anim.type cube anim.duration 1 設定轉場的方...

iOS之UI控制項之TableView詳細解釋

建立 uitableview datatable uitableview alloc initwithframe cgrectmake 0,0,320,420 datatable setdelegate self datatable setdatasource self self.view adds...