在项目中我们经常会遇到这样的需求
像这样的 或者 是这样的
这些有的有点击事件 有的要么就是只负责展示,我们该怎么去做呢?
方法:
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
然后 在LCImageLeftBtn的.m 中加入如下代码
因为在View 展示的时候 最后调用的就是layoutSubviews 方法 因此我们可以在这个方法中 对button 的图片以及文字的位置做最后的调整以满足我们的需求
这写代码的意思是这样的
1.首先把UIButton 的图片位置定在左边你需要的位置
2.在依照图片的位置确定文字的位置 如果中间有间隔 可以加上间隔
位置调整完毕后,我们就可以设置labe 和imgView的属性对文字以及图片进行调整 以便完成我们的需求
附:如果不想再写一个图片上文字下的buttn,我们可以为这个类加一个BOOL 属性,在layoutSubjects 中对这个属性进行判断 如果为Yes 展示 图片左文字右 负责 图片上文字下 或者其他的一些奇葩需求