最近對UIButton進行了一定的研究,發(fā)現(xiàn)了一點有意思的東西。
UIButton上titleLabel和imageView的顯示原則。
1.當button.width < image.width時,只顯示被壓縮后的圖片,圖片是按fillXY的方式壓縮。
2.當button.width > image.width,且 button.width < (image.width + text.width)時,圖片正常顯示,文本被壓縮。
3.當button.width > (image.width + text.width),兩者并列默認居中顯示,可通過button的屬性contentHorizontalAlignment改變對齊方式。
setTitleEdgeInsets和setImageEdgeInsets的使用
想兩改變兩個子控件的顯示位置,可以分別通過setTitleEdgeInsets和setImageEdgeInsets來實現(xiàn)。需要注意的是,對titleLabel和imageView設置偏移,是針對它當前的位置起作用的,并不是針對它距離button邊框的距離的。如果只有title,那它上下左右都是相對于button的,image也是一樣;如果同時有image和label,那這時候image的上左下是相對于button,右邊是相對于label的;title的上右下是相對于button,左邊是相對于image的。
button的屬性contentHorizontalAlignmen(水平對齊方式)默認是居中的,同時button還有一個contentVerticalAlignment(豎直對齊方式)屬性默認也是居中的。在我們不改變這兩個值的情況下,需要明白默認情況下,button的image和label是緊貼著居中的。直接這樣設置很麻煩很燒腦,了解一下就可以了,在使用時不推薦!
把button的contentHorizontalAlignment設為居左時,contentVerticalAlignment設為居上時,可以很方便的通過EdgeInsets改變兩個子控件的位置。這樣圖片和文字就在button的左上角了。且圖片在前,文字在后。相當于image的初始位置變?yōu)榱耍?,0)title的初始位置變?yōu)榱?image.width,0)。這樣就可以像類似frame那樣去設置值了,便于理解。當然根據(jù)需要你可以只設置水平的或者垂直的對齊方式。