修改UIButton的imageView和titleLabel的

2016-07-21  本文已影响1115人  seasa

前些天回答一个师弟的关于UIButton的问题,并对我的笔记进行整理,写词文章。

我们平时使用的UIButton的imageView和titleLabel其实内部做了一个懒加载,在设置了title和image的时候回显示它的位置,并且默认位置是图片的位置是在左,title的位置在右,并且会自动适应图片的大小和文字的长度并居中。但是很多时候,图片和文字的位置并不是我们想要的。本文将对此进行多种方法进行修改:

使用EdgeInsets修改

只修改button下的按钮上文字或图片与按钮边界的间隙,也就是Insets,但是值得注意的是imageView和titlelabel的frame其实是没有改变的,因为Insets使其发生偏移

[btn setTitleEdgeInsets:UIEdgeInsetsMake(0, -image1.size.width, 0, image1.size.width)];

[btn setImageEdgeInsets:UIEdgeInsetsMake(0, btn.titleLabel.bounds.size.width, 0, -btn.titleLabel.bounds.size.width)];

自定义空控件,重写titleRectForContentRect和imageRectForContentRect

1.自定义的Button要继承自UIButton

2.重写这两个方法:

-(CGRect)titleRectForContentRect:(CGRect)contentRect

{

CGFloat titleY = contentRect.size.height *0.6;

CGFloat titleW = contentRect.size.width;

CGFloat titleH = contentRect.size.height - titleY;

return CGRectMake(0, titleY, titleW, titleH);

}

-(CGRect)imageRectForContentRect:(CGRect)contentRect

{

CGFloat imageW = CGRectGetWidth(contentRect);

CGFloat imageH = contentRect.size.height * 0.6;

return CGRectMake(0, 0, imageW, imageH);

}

在titleRectForContentRect和imageRectForContentRect方法中修改button相对Button的位置,值得注意的是,上面的contentRect是自定义的Button的frame。

创建新类型的Button,跟UIButton一样调用,不需要做其他的修改,直接使用即可。本文只做imageView和titlelabel的左右的位置交换,也可以做imageView和titlelabel的上下位置的Button。


上一篇 下一篇

猜你喜欢

热点阅读