前些天回答一个师弟的关于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。