iOS button图片与文字

在项目中我们经常会遇到这样的需求


iOS button图片与文字_第1张图片

像这样的 或者 是这样的


iOS button图片与文字_第2张图片

这些有的有点击事件 有的要么就是只负责展示,我们该怎么去做呢?


方法:

1.使用UIButton进行展示,对button 的titleEdgeInsets 和 tImageEdgeInsets 属性进行设置以达到所需的效果 例如:

[button setTitleEdgeInsets:UIEdgeInsetsMake(0, 0, 0, 60)];

[button setImageEdgeInsets:UIEdgeInsetsMake(0, 60, 0, 0)];

2.自定义一个控件,控件包含一个labe负责展示文字,一个img 负责展示图片 算好图片和文字该展示的位置,然后再加一个 self.bounds 的button  用来触发事件。也是可以达到需求的。

问题:

但是这两种方法都会存在各种各样的局限性,比如 第一个,如果文字的长度不确定,那么位置会很不好计算,而且在不同的设备上会出现一些未知的错误(本人亲测,有的机子能正常显示,有的机子显示时位置就不对了)。第二种,虽然能完成需求但代码繁琐,使用不方便。

那么遇到这种问题我们该如何去解决呢?


解决方法:

我们可以创建一个新类继承UIbutton

iOS button图片与文字_第3张图片

然后 在LCImageLeftBtn的.m 中加入如下代码


iOS button图片与文字_第4张图片

因为在View 展示的时候 最后调用的就是layoutSubviews 方法 因此我们可以在这个方法中 对button 的图片以及文字的位置做最后的调整以满足我们的需求

这写代码的意思是这样的

1.首先把UIButton 的图片位置定在左边你需要的位置 


iOS button图片与文字_第5张图片

2.在依照图片的位置确定文字的位置 如果中间有间隔 可以加上间隔


iOS button图片与文字_第6张图片

位置调整完毕后,我们就可以设置labe 和imgView的属性对文字以及图片进行调整 以便完成我们的需求

附:如果不想再写一个图片上文字下的buttn,我们可以为这个类加一个BOOL 属性,在layoutSubjects 中对这个属性进行判断 如果为Yes 展示 图片左文字右 负责 图片上文字下 或者其他的一些奇葩需求

你可能感兴趣的:(iOS button图片与文字)